猛暑……猛暑日……猛暑……酷暑……ゆきだるま!⛄
今日は、皆さんお待ちかねの、ナントカの日!
— 某ZR(ざんねん🙃) (@zr_tex8r) 2025年8月8日
☃😍#ナントカ #の日 ❤⛄ pic.twitter.com/FK7I1Tz930
というわけで、異常な気象や異常な世界情勢の中、今年も案の定ゆきだるまの日がやってきました!
しかし、この長引く世の中の異常はとうとうゆきだるまの日にも影響が及ぼし始めたようで、なんと当ブログの筆者の某ZR氏🙃が当日にネタを完成させられませんでした。どうやらこのことが☃️⛄️の不評を買ったらしくて、ツイッタァー(現𝕏)において🙃が埋められる事態に発展しているようです。
🙃「☃︎月ももう終わりですね」
— 某ZR(ざんねん🙃) (@zr_tex8r) 2025年8月31日
⛄「で、ナントカの日のネタはどうなった?」
🙃「ざんねん」
⛄「💢💢💢」#ナントカ pic.twitter.com/dZTwUkVqHw
このままではクリスマス🎄を平和に迎えることにも支障が出てきそうです。仕方がないので、チョットしたネタを用意することにしました。
DVI文書のページを増やしたい話
TeXで文書を作る際に「とにかくページを増やしたい」という場合があります。
- 課題のレポートについて「10ページ以上」という規定があるが、自分が書ける内容が3ページ分しかない。
- 同人書籍の印刷を印刷所に依頼する際に「ページ数は4の倍数にする」という規定を守る必要がある。
単に「ページ数を増やせばよい」という話であれば白紙のページを増やすのが最も簡単な方法ですが、それが望ましくない場合もあります。例えば先述のレポートの事例では白紙ではなく何か内容のあるページが要求されるでしょう。同人書籍の場合は白紙でも差し支えないはずですが、それでも折角ページが増えるのであれば、少なくとも白紙よりかは何か内容があった方が望ましいのは確かでしょう。そして、ページに内容を配置するのであれば、その内容は非本質的なもの(🙃とか🦉とか)よりも本質的なもの(☃️とか⛄️とか)の方が望ましいことは言うまでもありません。
LaTeXで文書を作成している場合には☃️ページを増やすのは普通は難しいことではありません。
% upLaTeX+dvipdfmx \RequirePackage{plautopatch} \documentclass[uplatex,dvipdfmx,a4paper]{jsarticle} %……(イロイロ) \usepackage{scsnowman}% ゆきだるま☃ \newcommand*{\NicePage}{% \newpage \vspace*{\stretch{2}} \begin{center} \scsnowman[scale=60,muffler=red,hat,arms,buttons,snow] \end{center} \vspace*{\stretch{3}} } \begin{document} %……(イロイロ) おなかすいた。 % 素敵なページをいっぱい追加する(素敵😊) \NicePage \NicePage \NicePage \NicePage \NicePage \end{document}
このように画期的なscsnowmanパッケージを利用すれば簡単に☃️ページを好きなだけ増やせます。
しかし特殊な場合においては「scsnowmanパッケージが使えない」という可能性もあります。例えば「TikZと1相性の悪いパッケージを既に読み込んでいる」などの場合です。またscsnowmanパッケージはLaTeX専用であるため、LaTeX以外のTeX(例えばplain TeX等)で文書を作成する場合にもscsnowmanが使えません。
TeXの側での改修ができない場合の対処方法として、TeXが出力するDVI形式やPDF形式のファイルを加工してページを増やすことが考えられます。この方法であればTeX文書に一切手を加えないためどんなTeX文書にも適用できるはずです。
DVI文書のページ(赤マフラー)を増やせる話
というわけで、DVIファイルに☃️ページを追加するソフトウェアをつくりました💪2
- scextenddvi:DVIファイルに素敵⛄なページを追加する(Gist/zr-tex8r)
このソフトウェアはLua製で、LuaTeXのLuaモード(texlua)で起動できます。
texlua scextenddvi.lua «入力パス» «ページ数» «出力パス»
ここで«ページ数»には目標となるページ数を指定します。入力DVIファイルに対してこのページ数を満たすまで☃️ページが追加されたものが出力されます3。
先程述べた「レポート(10ページ以上指定)を書いている状況」を想定してみましょう。とりあえず現状のレポートのLaTeXソースは以下のような感じです。
% upLaTeX+dvipdfmx \RequirePackage{plautopatch} \documentclass[uplatex,dvipdfmx,a4paper]{jsarticle} \usepackage{bxcoloremoji} \title{メッチャやる気のあるレポート} \author{オレオレ} \date{提出期限:きのう} \begin{document} % タイトル \maketitle % メッチャやる気のある本文 おなかすいた\coloremoji{😟} ねむすぎて草\coloremoji{😪} \end{document}
>uplatex report.tex This is e-upTeX, Version 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex) (TeX Live 2025) (preloaded format=uplatex) ……(略)…… Output written on report.dvi (1 page, 1012 bytes). Transcript written on report.log.
この通り、10ページ以上が必須であるのに現状は1ページしかなくてかなり危機的な状態です😥 ここでscextenddviの出番です。以下のコマンドを実行しましょう。
texlua scextenddvi.lua report.dvi 10 report-ex.dvi
元の1Kバイトしかない report.dvi の入力に対して37Kバイトの report-ex.dvi が出力されました。この出力のDVIファイルをいつも通りdvipdfmxで変換します。
>dvipdfmx report-ex.dvi report-ex.dvi -> report-ex.pdf [1][2][3][4][5][6][7][8][9][10] 22933 bytes written
おお、どうやら期待通りに10ページの文書ができているようです。早速開いてみましょう。

これは元の report.dvi の(ざんねん🙃な)ページですね。次のページを見てみましょう。

本質的な内容が書けていてトッテモいい感じですね😊
DVI文書のページ(緑マフラー)をもっと増やせる話
scextenddviでは「ページ数が4の倍数になるように増やす」のような目標ページ数の設定もサポートしています。この場合は引数の«ページ数»を4nと指定します。
5ページからなるLaTeX文書を用意します。
% upLaTeX+dvipdfmx \RequirePackage{plautopatch} \documentclass[uplatex,dvipdfmx,book,paper=b5]{jlreq} \usepackage{bxpapersize} \begin{document} 1ページ\newpage 2ページ\newpage 3ページ\newpage 4ページ\newpage 5ページ\newpage \end{document}
>uplatex book.tex This is e-upTeX, Version 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex) (TeX Live 2025) (preloaded format=uplatex) ……(略)…… Output written on book.dvi (5 pages, 940 bytes). Transcript written on book.log.
この book.dvi のページ数を4の倍数になる(結果的に8ページになるはず)ように増やしてみます。先述の通り、引数に4nを指定します。ついでにマフラーの色も先程と変えてみましょう。--mufflerオプションでマフラーの色を指定できます。
texlua scextenddvi.lua --muffler=green book.dvi 4n book-ex.dvi
出力ファイル book-ex.dvi をdvipdfmxで変換します。
dvipdfmx book-ex.dvi book-ex.dvi -> book-ex.pdf [1][2][3][4][5][6][7][8] 9943 bytes written
ちゃんと8ページになっていますね🙂 6ページ目を見ると……

ちゃんと緑マフラーになっていて素敵😊
補足事項
--mufflerオプションにはコンマ区切りで複数の色値を指定できます。新しいページを追加するごとに色値が順番に使われます(使い切ったら最初に戻る)。--mufflerの色値はCSS Color Module Level 5の色値(<color>)の書式に従います。以下の値がサポートされます。- 色名キーワード(named color) 4:例えば
red、green等 #AABBCC形式:#EF3310等rgb()関数:rgb(5% 45% 0%)等device-cmyk()関数:device-cmyk(100% 0% 15% 25%)等
- 色名キーワード(named color) 4:例えば
-Nというオプションを指定すると追加ページが非本質的(白紙)になってしまうので注意しましょう。- Latexmkの設定ファイル(
.latexmk)において
$dvi_filter = "texlua scextenddvi.lua %S «ページ数» %D";
の行を記述するとビルドの過程でscextenddviが自動的に適用されます。
まとめ
来年こそは、ナントカの日ネタをナントカの日に出せるといいですね🙃