将来のpLaTeXは素敵(かも)
今年の「ゆきだるま☃の日」の記事では「pLaTeXが将来に本質的☃になる(かもしれない)」という話を紹介しました。かいつまんで言うと、「数年後の公開を目指して現在LaTeXチームが行っているLaTeXカーネルの大規模改修について、現在のpLaTeXの実装の改修が追いつかなくなり、その回避策として、将来、pLaTeXの実装が本質的☃になる(かもしれない)」というものでした。
つまり、将来のpLaTeXは「用紙サイズだけ決めれば自動的に本質的で素敵な出力☃が得られる(かもしれない、以下同様)」というわけです。文書の内容を考えるのは極めて面倒な作業であるため、その苦労から解放されるというのはトッテモ素晴らしいことですね! pLaTeXの普及がドンドン進むことでしょう!
しかし多様性(マフラーの色)は重要
これについて、文書が本質的になるのはいいとしても、その内容が完全に画一になることについては不満がある人がいるかもしれません。
「やっぱり、青マフラーのやつの方がよい……」
確かに、文書の本質性のために内容をゆきだるま☃に統一することは必然だとしても、そのマフラーの色が赤である必要はなく、青やオレンジなどの他の色であっても本質性は担保されるはずです。それゆえ「マフラーの色を指定したい」という要望は十分に理に適っています。
ご安心ください。新しい本質的pLaTeXはこの「マフラーの色の変更」という要望もしっかりサポートしています。しかし、その説明をするには、まず本家のLaTeXカーネルの新機能の話から始めないといけません。
将来のフツーのLaTeXの話
「pLaTeXが将来的に本質的になる」を単なる🙃な冗談だと思っている人もいるかもしれません(実際、可能性の一つに過ぎない)が、この節に書いてある「LaTeXの将来」はマジで本当の話です。
現状のLaTeXの構文についてLaTeXチームが問題にしているのが
「文書全体に関わる設定」を記述する適当な場所がない
という点です。ここで「文書全体に関わる設定」に該当するのは「使用するDVIウェアの種類(いわゆる“ドライバオプション”)」「文書の基底言語」「出力PDFバージョン」などです。現状のLaTeXではこのような「文書全体に関わる設定」を文書クラスのオプションとして指定する慣習になっていて、この用法は特に「グローバルオプション」と呼ばれています。例えば、dvipdfmxを利用する文書を作る場合、\documentclass
命令のオプションにdvipdfmx
を指定することが求められます。
% LaTeX+dvipdfmx用の文書 \documentclass[dvipdfmx,a4paper]{article}%←'dvipdfmx'が必要 \usepackage{graphicx} \usepackage{scsnowman} %...(略)
しかし、クラスオプションは本来は文書クラスの動作を制御するためのものであり、それを「文書全体に関わる設定」のために使うことは本来の目的から外れていて解りにくいとも考えられます。
そこで、将来のLaTeX(冒頭で述べた大改修)では専ら「文書全体に関わる設定」を記述することを目的とする「文書メタデータ」という仕組が導入されることになっています。現在策定中の仕様では、この「文書メタデータ」は \DocumentMetadata という命令を文書ファイルの冒頭(つまり\documentclass
よりも前)に以下のような感じで書いて指定します。
% LaTeX(将来)+dvipdfmx用の文書 \DocumentMetadata{%←文書メタデータの記述 pdfversion = 1.7, % 出力PDFバージョン lang = en-US, % 文書の基底言語 backend = dvipdfmx, % ドライバオプション } %↓"グローバルオプション"のdvipdfmxは不要になる \documentclass[a4paper]{article} \usepackage{graphicx} \usepackage{scsnowman} %...(略)
将来の本質的なpLaTeXの話(かも)
さて話を本質的なpLaTeXの方に戻しましょう。例の記事で述べた通り、この新しいpLaTeXは本家のLaTeXカーネルとは別に独自に(plainを元にして)実装されたものですが、そもそも「新しいLaTeXの仕様に追随させる」ことを目的としています。ということは当然、先ほどの \DocumentMetadata 命令にも対応しています。
※ただし「そもそも本質的な文書では意味がない」などの理由のため、現状で意味をもつ(本家と互換の)設定項目はbackend
(ドライバオプション)のみとなっています。
% pLaTeX(本質的)+dvipdfmx用の文書 \DocumentMetadata{%←文書メタデータの記述 backend = dvipdfmx, % dvipdfmxを使う } %↓"グローバルオプション"のdvipdfmxは不要 \documentclass[paper={200mm,200mm}]{jlreq} \usepackage{tikzlings-owls} %...(略, というかここは無視される)
この文書は「ドライバオプションがdvipdfmx
である」ことをグローバルオプションではなく文書メタデータ(\DocumentMetadata
命令)で指定していますが、新しい本質的なpLaTeXはこれを正しく解釈するので、dvipdfmxで処理可能なDVIファイル(赤マフラー)を出力します。
素敵😊
\DocumentMetadataでマフラーの色を指定できる(かも)
実は、新しい本質的なpLaTeXでは文書メタデータによりマフラーの色を指定することも可能です。具体的には\DocumentMetadata
命令の引数の中に以下のような値指定(muffler
キー)を含めることで出力中のマフラーの色を指定できます。
muffler = {<マフラーの色>}
ここで色は「xcolorの色式 (color expression)」で指定します1。例えばマフラーが「やや暗い緑色」である文書を出力したい場合は以下のように書きます。
% pLaTeX(本質的)+dvipdfmx用の文書 \DocumentMetadata{% 文書メタデータ backend = dvipdfmx, muffler = {green!50!black}, % マフラーの色の指定 } \documentclass[paper={200mm,200mm}]{jlreq} %...(略)
緑マフラーのやつも素敵😊
\DocumentMetadataでもっともっと素敵にする(かも)
ところで、新しい本質的なpLaTeXでは文書に2段組の設定をするとゆきだるま☃が2つ出力されるのでした(もっと素敵😊) この場合のマフラーの色は「赤と青」になります。
% pLaTeX(本質的)+dvipdfmx用の文書 %↓"twocolumn"オプションで2段組を指定 \documentclass[dvipdfmx,paper={320mm,180mm},twocolumn]{jlreq} %...(略)
赤マフラーと青マフラーが並んでいてもっと素敵😊
文書メタデータのmuffler
キーでは各々のゆきだるま☃のマフラー色を指定できます。次のようにコンマ区切りで複数の色(色式)を書くと、それらの色が順に使われます。
% pLaTeX(本質的)+dvipdfmx用の文書 \DocumentMetadata{% 文書メタデータ backend = dvipdfmx, muffler = {red!45,cyan!75}, % コンマ区切りで複数の色を指定できる } \documentclass[paper={320mm,180mm},twocolumn]{jlreq} %...(略)
ピンク色マフラーと水色マフラーが並んでいるのももっと素敵😊
「文書を2段組にすると☃も2つになってもっと素敵になる」ということがわかると、今度は「3段組、4段組のようにもっともっとカラム数を増やした文書(もっともっと素敵😊)を作りたい」と思い始めるでしょう。しかし残念なことに、3段以上の段組をサポートしている文書クラスは見当たりません2。
そこで、新しい本質的なpLaTeXの文書メタデータでは「文書のカラム数」も指定できるようにしています。次のように、\DocumentMetadata
命令のcolumns
キーでカラム数を指定します。
columns = <整数>
このcolumns
キーを利用して3段組の文書を作ってみましょう。
% pLaTeX(本質的)+dvipdfmx用の文書 \DocumentMetadata{% 文書メタデータ backend = dvipdfmx, columns = 3, % 3段組 muffler = {red,blue,green!50!black}, % 色も3つ指定する } \documentclass[paper={320mm,180mm}]{jlreq} %...(略)
もっともっと素敵😊😊
なお、カラム数に対してマフラーの色の個数が不足している場合は「色を使い切ったあとはもう一度最初から使う」という動作になります。例えばmuffler
キーの既定値はred,blue
であるため、columns
に大きな値を指定してmuffler
を指定しないと、赤マフラーと青マフラーが交互に並ぶことになります。
% pLaTeX(本質的)+dvipdfmx用の文書 \DocumentMetadata{% 文書メタデータ backend = dvipdfmx, columns = 6, % 6段組! % mufflerは無指定 } \documentclass[paper={500mm,100mm}]{jlreq} %...(略)
もっともっともっと素敵😊😊😊
まとめ(かも)
来たるべき3「pLaTeX本質化時代」においても、あなた好みのマフラー色を駆使して個性的な文書☃をつくりましょう!💁💁💁
- ただしxcolor自体はLaTeX専用のパッケージであり、新しい本質的なpLaTeXは実際にはplainベースであるため、ここで指定される色式を解釈しているのはxcolorではなくTikZパッケージ(のplain用実装)です。残念ながら、TikZによる色式のサポートは部分的なものに留まっています。具体的には「単純な色名指定」および「2色のブレンド」(つまり“‹色名1›!‹割合›!‹色名2›”)の形式のみが使用可能です。ただし \colorlet 命令はサポートされているのでこれを用いると実質的に多色のブレンドが指定できます。↩
- LaTeXの文書クラスは当然“LaTeX専用”であるため、実際には本質的なpLaTeXは文書クラスのファイルの内容は全く読んでおらず、代わりに「一部の特定の文書クラスの特定のオプション」の動作をエミュレートしています。なので、仮に3段以上の段組をサポートする文書クラスがあったとしても、それは本質的なpLaTeXでは“サポートされない”ことになります。↩
- えっ、来てほしくない?😲↩