☃、☃☃☃☃☃!
☃☃~☃☃☃~、☃☃☃☃。
☃☃☃☃~☃、☃☃~~~~~☃、☃☃☃☃☃、☃☃☃☃☃。☃☃~☃、☃~~~☃~~~☃~~~☃☃☃~、☃☃~~☃☃~~☃☃~~☃☃☃~。☃~~~~~~~~~~~~!!
☃☃☃。
☃
☃☃☃☃☃!
(☃☃☃)
☃、☃☃☃☃☃!
☃☃~☃☃☃~、☃☃☃☃。
☃☃☃☃~☃、☃☃~~~~~☃、☃☃☃☃☃、☃☃☃☃☃。☃☃~☃、☃~~~☃~~~☃~~~☃☃☃~、☃☃~~☃☃~~☃☃~~☃☃☃~。☃~~~~~~~~~~~~!!
☃☃☃。
☃
☃☃☃☃☃!
(☃☃☃)
※Luaフィルタ特有のLuaメタテーブルをもつテーブル値のことを(マニュアルに倣って)「オブジェクト(object)」と呼ぶことにする。特に、tag値がFoo
であるオブジェクトを「Fooオブジェクト」と呼ぶ。
※MetaInlinesやMetaBlocksも実質的にListオブジェクトなので、Luaシーケンスとして扱える。
コマンド行のオプション(--metadata
/-M
)で指定するメタデータは必ず真偽値か文字列として扱われる。
Values will be parsed as YAML boolean or string values. If no value is specified, the value will be treated as Boolean true.
メタデータファイル(--metadata-file
)んそ指定は、Pandoc’s Markdownのメタデータブロックと同様に扱われる。(ただし入力形式がMarkdown以外でも使える。)
Generally, the input will be handled the same as in YAML metadata blocks.
既定値ファイル(--defaults
/-d
)のフィールドはコマンド行オプションに対応する。
FILE is a YAML file whose fields correspond to command-line option settings.
既定値ファイルでの設定は、コマンド行オプションによって上書きまたは拡張される。
Settings from the defaults file may be overridden or extended by subsequent options on the command line.
複数指定できるオプション(--metadata
も含む)の場合は上書きではなく拡張になる。
Note that, where command-line arguments may be repeated (…), the values specified on the command line will combine with values specified in the defaults file, rather than replacing them.
メタデータブロック(またはメタデータファイル)で設定されるメタデータ値はリストやオブジェクトでもよい。文字列のスカラー値はMarkdownのソースとして解釈される。
Metadata will be taken from the fields of the YAML object and added to any existing document metadata. Metadata can contain lists and objects (nested arbitrarily), but all string scalars will be interpreted as Markdown.
オプションで指定した値の文字列が、そのままMetaString型のメタデータ値となる2。ただし例外として、true
/True
/TRUE
/false
/False
/FALSE
は真偽値として解釈されて3MetaBool型のメタデータ値となる。また、値を省略した場合(-M フィールド
)はMetaBool型のtrueとなる。
-M foo=Bar
→ fooの値はMetaString["Bar"]
。-M foo=42
→ fooの値はMetaString["42"]
(文字列)。-M foo=yes
→ fooの値はMetaString["yes"]
。-M foo=[42.00]
→ fooの値はMetaString["[42.00]"]
。-M foo=true
→ fooの値はMetaBool[true]
。-M foo=False
→ fooの値はMetaBool[false]
。-M foo=truE
→ fooの値はMetaString["truE"]
(文字列!)。-M foo=false,0
→ fooの値はMetaString["false,0"]
。-M foo
→ fooの値はMetaBool[true]
(値を省略)。-M foo=
→ fooの値はMetaString[""]
(値が空文字列)。同じフィールドを複数回指定した場合は、各々のメタデータ値を順に並べたMetaList値として扱われる。オプションで指定したメタデータ値がMetaMapになることは恐らくない。
-M foo=Baz -M foo=Bar
MetaList[MetaString["Baz"],MetaString["Bar"]]
。-M foo=0 -M foo=TRUE
MetaList[MetaString["0"],MetaBool[true]]
。-M foo.bar=54
MetaString["54"]
に設定される。fooがMetaMapになるのではない。既定値ファイルの内容はYAMLのマッピング値として解釈され、そのmetadataキーに対する値(これもマッピング値でないといけない)がメタデータとして解釈される。
!!str
型)はそのまま。!!bool
型)は、真(true
/True
/TRUE
)はtrue
、偽(false
/False
/FALSE
)は空文字列になる。MetaBool値になるのではない。!!int
型・!!float
型)は、その典型的な文字列表現になる。intの42は42
、floatの42は42.0
、無限大(.inf
)はInfinity
、等。!!null
型、表記は~
/null
等)は空文字列になる4。例えば次のような内容の既定値ファイルを指定したとする。
metadata: foo1: blah foo2: "false" bar1: 0x42 bar2: 042.000 gee1: True gee2: FALSE whiz1: [true,false] whie2: - false - true whiz3: boo: ! 0x42
MetaString["blah"]
。MetaString["false"]
。(" "
囲いなのでYAMLで文字列型と見なされる。)MetaString["66"]
。(YAMLで整数の66と見なされるので)MetaString["42.0"]
。MetaString["true"]
。(MetaBoolではない。)MetaString[""]
。(なぜかfalseは空になる。)MetaList[MetaString["true"],MetaString[""]]
。MetaList[MetaString[""],MetaString["true"]]
。MetaMap[("boo",MetaString["0x42"])]
。(!
が文字列型を強制するのでYAMLで文字列の0x42
と解釈されている。)(つづけ)
xeCJKパッケージの動作設定命令(\xeCJKsetup
)のオプションキーのうち、「空白の設定」に関するものについて、チョット調べてみた。
※ただし「句読点スタイル()」に関するもの(PunctStyle
など)は除く。
※XeTeXでは(元祖TeXと同様に)空行にならない改行は常に空白文字と同等に扱われる。(u)pTeXのような「改行を特殊に扱う規則」を実装することは不可能である1。
……チョット日本人には解りにくいね。
CJKspace
[真偽値;省略時=true2;既定値=false]
CJKglue
[テキスト;既定値={\hskip 0pt plus 0.08\baselineskip}
]
CJK文字間に挿入する空きを生成する命令を指定する。両端寄せを行うため、このオプションを設定する場合は伸縮する空きを設定すべきである。
CJKecglue
[テキスト;既定値={ }
(欧文空白)]
CJK文字と欧文、およびCJK文字と数式の間の空きを生成する命令を指定する。このオプションを設定する場合は伸縮する空きを設定すべきである。注意すべき点として、この設定はxeCJKが自動的に挿入する空きにのみ影響し、CJK文字と欧文の間に明示的に入れた空白文字の出力には影響しない。空きの自動挿入はうまく機能しない場合があり、そのときは手動で空白文字を入れる必要がある。
xCJKecglue
[真偽値またはテキスト;省略時=true;既定値=false]
xCJKecglue=true
とCJKecglue=テキスト
を設定するのと等価になる。2020-03-25にBXjsclsの新しいメジャーバージョンとなる2.0版がリリースされた。TeX Liveについては、2020-04-10にリリースされたTeX Live 2020の初期版が2.0版となる。現在の最新版は2.0a版である。
メジャー改版であるため後方互換性を損なう仕様変更が含まれる。注意してほしい。
※2.0→2.0a版の違いは、一部の非推奨機能への警告の追加のみである1。
TeX Live 2020において、updmapでの和文(日本語)のフォントの既定値がipaex
からharanoaji
に変更された2。つまり、(u)pLaTeXの標準和文フォントとして使われる物理フォントが「IPAexフォント」から「原ノ味フォント」変わることになる。これに追随する形で、LuaTeX-jaにおける既定の和文フォントも「IPAexフォント」から「原ノ味フォント」に変更された。
そこで、BXjsclsクラスもこれに追随して、LuaLaTeX/XeLaTeX上の動作における既定の和文フォントを「IPAexフォント」から「原ノ味フォント」に変更することにした3。
% LuaLaTeX文書; UTF-8 % フォント指定(jafont)が無い \documentclass[lualatex,ja=standard,a4paper]{bxjsarticle} \begin{document} ☃っ☃☃☃っ☃っ☃~~♪ \end{document}
フォント指定(jafont
オプション)のない上掲の文書をlualatexでコンパイルした場合、旧版では「IPA明朝」で出力される。
対して、新版(2.0版以降)では「原ノ味明朝」で出力される。
なお、和文フォントのプリセットの種類はjafont
で指定できるので、「IPAexフォント」で出力したい場合はクラスオプションにjafont=ipaex
を指定すればよい。
% LuaLaTeX文書; UTF-8 %フォント指定(jafont=ipaex)がある \documentclass[lualatex,ja=standard,jafont=ipaex, a4paper]{bxjsarticle} \begin{document} ☃っ☃☃☃っ☃っ☃~~♪ \end{document}
(u)pLaTeX上の動作の場合は、BXjsclsのクラスは和文フォント(のフォントマップ)の指定を何も行わず、従ってDVIウェアの設定(TeX Liveの場合はupdmapの設定)がそのまま適用される。従ってTeX Live 2020であれば、LuaLaTeX/XeLaTeXと同様に「原ノ味フォント」が使用される4。
pdfLaTeXで和文を扱う場合は和文フォントを「Type1形式のサブフォント」として用意する必要がある。現状では「原ノ味フォント」のType1形式サブフォントは存在しないので、従来の「IPAexのType1形式サブフォント」(ipaex-type1パッケージ)が引き続き既定値として用いられる。
開発者用命令5の\ifdraft
は1.2版(2016-08-01)において既に非推奨の扱いになっていたが、2.0版において廃止された。代わりの開発者用命令として\ifjsDraft
が用意されているので、そちらを利用する必要がある。
※ユーザレベルで「draftモードであるかを判定したい」場合は、ifdraftパッケージの使用を推奨する。
※\ifdraft
はjsclassesの機能を継承したものであるが、本家のjsclassesにおいては\ifdraft
は2016年7月に(非推奨ではなく)廃止されている。「ifdraftパッケージと衝突する」という問題があったためである。
geometry 4.x版の使用は1.2版(2016-08-01)において既に非推奨となっていたが、2.0版ではgeometryの4.x版のサポートが廃止となり、5.0版(2010-02-12)以降が必須となる。
既に1.9版のリリースのときに予告されていたように、旧版との互換のための機能の多くが2.0版で非推奨の扱いとなった。(廃止ではない。)
エンジンが(u)pLaTeX以外の場合に和文ドライバ指定(ja
オプション)を省略した場合はminimal
が指定されていた。
% XeLaTeX文書; UTF-8 \documentclass[xelatex,a4paper]{bxjsarticle} \usepackage{zxjatype} \setCJKmainfont{IPAexMincho} \setCJKsansfont{IPAexGothic} \begin{document} {\TeX}言語\textsf{危険}、ダメゼッタイ。 \end{document}
以前の版において既にja
オプションを明示することが“推奨”されていたが、2.0版において正式に、省略が非推奨となった。2.0a版においてはja
を省略すると以下のような警告が出る。
Class bxjsarticle Warning: The option 'ja' is MISSING!! (bxjsarticle) So 'ja=minimal' is assumed as fallback, but (bxjsarticle) such implicit setting is now DEPRECATED! (bxjsarticle) You should write 'ja=minimal' explicitly, (bxjsarticle) if it is intended.
以前の動作を保ちたい場合はja=minimal
を指定すべきである。
% XeLaTeX文書; UTF-8 % 和文ドライバを明示的に指定する \documentclass[xelatex,ja=minimal,a4paper]{bxjsarticle} \usepackage{zxjatype} \setCJKmainfont{IPAexMincho} \setCJKsansfont{IPAexGothic} \begin{document} {\TeX}言語\textsf{危険}、ダメゼッタイ。 \end{document}
ただし実際には「minimalモード」ではなく「standardモード」を使う方が妥当6であることが多いはずである。今まで“ja
無し”で使っていた人は「standardモード」への移行を検討してほしい。
% XeLaTeX文書; UTF-8 % standardモードの方が便利 \documentclass[xelatex,ja=standard,jafont=ipaex,a4paper]{bxjsarticle} \begin{document} {\TeX}言語\textsf{危険}、ダメゼッタイ。 \end{document}
※エンジンが(ujpLaTeXである場合はja
の既定値はstandard
であり、この場合はja
の省略は非推奨ではない。
現在のBXjsclsには「DVIモードでのみ適用されるドライバ指定」を行うためのdvi
オプションがあるが、昔はdvi=dvipdfmx
に相当するdvipdfmx-if-dvi
というオプションが利用されていた。
% エンジン自動判別, DVIモード時はdvipdfmxドライバを指定 \documentclass[autodetect-engine,dvipdfmx-if-dvi,ja=standard]{bxjsbook}
dvipdfmx-if-dvi
は2.0版で非推奨の扱いとなり、2.0a版では警告が出る。
Class bxjsbook Warning: The old option 'dvipdfmx-if-dvi' is DEPRECATED (bxjsbook) and may be abolished in future! (bxjsbook) You should write 'dvi=dvipdfmx' instead.
代わりにdvi=dvipdfmx
を指定すべきである。
% エンジン自動判別, DVIモード時はdvipdfmxドライバを指定 \documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard]{bxjsbook}
以上に述べたものの他、以下のオプションが非推奨となる。
(no)js
(→disguise-js=<真偽値>
)(no)zw
(→use-zw=<真偽値>
)(no)precisetext
(→precise-text=<真偽値>
)(no)simplejasetup
(→simple-ja-setup=<真偽値>
)textwidth-limit=<整数>
(→textwidth-limit=<整数>zw
)magstyle=mag/real/xreal
(→magstyle=usemag/nomag/nomag*
)jadriver=<名前>
(→ja=<名前>
)noscale
(→scale=1
)2.0a版においても、非推奨の全てで警告が出るわけではないので注意。↩
「原ノ味フォント」自体(haranoajiパッケージ)とupdmapでのサポート(ptex-fontmapsの改版)は2020年2月にCTANに登録されているため、TeX Live 2019の最終版にも含まれている。↩
なお、updmapの和文フォント既定値のharanoajiについては「2004JIS字形」が指定されている。従来の「IPAexフォント」はAJ1非対応のフォントであり字形選択が無効であるため自動的にフォントの既定である2004JIS字形が選ばれていたが、「原ノ味フォント」はAJ1対応のフォントであり字形選択が有効(かつ必須)になる。そこで従来の2004JIS字形を保つために「2004JIS字形」を選択している。LuaTeX-jaやzxjatype(XeTeX)では字形選択は可能であるが必須ではない。LuaTeX-jaの和文フォントの既定では字形選択を行わず、結果的に「原ノ味フォント」の既定である2004JIS字形が選ばれる。BXjsclsのLuaLaTeX/XeLaTeX上の既定設定も同様である。要するに、旧版でも新版でも既定の和文フォントは2004JIS字形となる。↩
なお、LuaLaTeX上の動作の場合はLuaTeX-jaの新しい既定値は既に「原ノ味フォント」であるが、XeLaTeXと動作を合わせるために「原ノ味フォント」を明示的に設定している。従って、古いLuaTeX-jaと組み合わせた場合でも既定値は「原ノ味フォント」である。↩
実態はTeX言語のif-トークンである。なので、ユーザレベルでもifthenパッケージを介して\ifthenelse{\boolean{draft}}...
という形で一応利用できていた。↩
TeX Wikiの解説をみればわかるように、BXjsclsの多くの追加機能はstandardモードでのみサポートされる。↩
(前回の続き)
従来の版(0.4版以前)の情報については以下を参照。
zxjafontのプリセットの指定対象は、例えばipa
の場合は以下のようになる。
\rmfamily
が「IPA明朝」、和文の\sffamily
が「IPAゴシック」になる。(和文サポートモード)\rmfamily
が「IPA明朝」、\sffamily
が「IPAゴシック」になる。zxjatypeがない場合は日本語組版はサポートされないしそもそもフォントに「和文と欧文」の区別もない。しかしzxjafontはそういう状況で使うことも想定されていて、その場合は(区別のない)全体のフォントが設定対象となる。
ところがこれまでzxjafontは「zxjatypeが読まれずxeCJKだけ読み込まれている」状況は想定しておらず、この状況で無理に使うと「日本語のフォントが欧文だけに設定される」という奇妙な動作になっていた。「日本語組版をやりたいならzxjatypeを使っていて当然」であればそうで構わないのであるが、前回に述べたの通り、「日本語組版機能のためのzxjatype」という地位が非常に危ういものになっている。この辺りの事情を踏まえて考慮した結果、1.0版において、「xeCJKが読み込まれた場合も、zxjatype読込時と同様に和文サポートモードを適用する」という仕様変更を行うことにした。
既に前回のzxjatypeの例の中に登場しているが、「原ノ味フォント」を指定するプリセットオプションharanoaji
が追加された。
※BXjsclsのクラスを用いたXeLaTeX文書でクラスオプションにjafont=haranoaji
を指定した場合、zxjafontが読み込まれてプリセットharanoaji
が適用される。
% XeLaTeX文書; UTF-8 \documentclass[xelatex,ja=standard,jafont=haranoaji, prefercjk,a4paper]{bxjsarticle} \begin{document} ①☀っ☁☂☀~っ?\par ❷☃っ☃☃☃~っ!\par \end{document}
これで、ptex-fontmaps、pxchfon、luatexja-preset、zxjafontの全ててharanoaji
が使用可能になったことになる。
zxjafontパッケージの目的は「(u)pLaTeXのpxchfonパッケージやLuaLaTeXのluatexja-presetパッケージが提供するようなプリセット指定機能をXeLaTeXで実現すること」であるが、特に多ウェイトのプリセットについてはzxjafontは他のパッケージにはない制限があった。それは「明朝・ゴシック各々2ウェイトしか使えない」ということである。
例えば、LuaLaTeXでluatexja-presetパッケージをdeluxe
付きで読み込んだ場合、明朝体で細字(通常より細い)を指定する\ltseries
とゴシック体で極太を指定する\ebseries
が使えるようになる。
※(u)pLaTeXでjapanese-otfをdeluxe
付きで読み込んだ場合と同じ。
% LuaLaTeX文書; UTF-8 \documentclass[a4paper]{ltjsarticle} % 源ノフォントを多ウェイトで使う \usepackage[sourcehan,deluxe]{luatexja-preset} \begin{document} % 3ウェイトが使える ☃明朝体で{\ltseries 細字}や中字や\textbf{太字}。\par \sffamily ゴシックで中字や\textbf{太字}や{\ebseries 極太}。\par \end{document}
対して、旧来のzxjafontでは、多ウェイトのプリセットを指定した場合でも、\ltseries
や\ebseries
は提供されず、またそもそもプリセット自体が中字と太字の2ウェイトしか定義されていなかった。
1.0版以降のzxjafontでは、luatexja-presetやjapanese-otfと同様に「明朝・ゴシック各々3ウェイト」が使えるようになる。すなわち、\ltseries
や\ebseries
の命令が提供され、プリセットの定義も3ウェイトになる。
% XeLaTeX文書; UTF-8 \documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk, a4paper]{bxjsarticle} \begin{document} ☃明朝体で{\ltseries 細字}や中字や\textbf{太字}。\par \sffamily ゴシックで中字や\textbf{太字}や{\ebseries 極太}。\par \end{document}
この「3ウェイト定義」を有効にするオプションはthreeweight
であるが、このオプションは原則的に既定で有効になっているので指定は不要である。逆に、何らかの理由(例えば\ltseries
や\ebseries
の定義がトラブルを起こす、など)でthreeweight
の機能を無効にしたい場合はnothreeweight
というオプションを指定1すればよい。
% XeLaTeX文書; UTF-8 \documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk, nothreeweight,a4paper]{bxjsarticle} \begin{document} ☃明朝体で中字や\textbf{太字}。\par \sffamily ゴシックで中字や\textbf{太字}。\par \end{document}
「源ノフォント」を使いたいが、でも「明朝・ゴシック各々1ウェイトしか使わず、かつ明朝の太字をゴシックにする」という「単ウェイトの和文フォント設定」を維持したい場合は、oneweight
というオプション(これは昔から存在する)を指定すればよい。
\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk, oneweight,a4paper]{bxjsarticle} %……あとは直前の例と同じ
出力結果をみて判るように、このoneweight
を指定したときに明朝とゴシックで実際に使われるウェイトは、多ウェイトプリセットにおいて「中字」のウェイトに相当するものである2。
0.7版以降ではbold
というオプションが利用できる。これを利用すると、oneweight
と同じく「単ウェイトの設定」が維持されるが、そこで使われるゴシックのウェイトがプリセットの「太字」に相当するものになる。これはluatexja-presetやjapanese-otfのbold
オプションと同様の機能である。
\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk, bold,a4paper]{bxjsarticle} %……あとは直前の例と同じ
多ウェイトのプリセットの制御のオプションをまとめると以下のようになる。
threeweight
: 3ウェイトを使用。これが既定。nothreeweight
: 2ウェイトを使用。oneweight
: 単ウェイト用設定。bold
: 単ウェイト用設定3で、ゴシックを太字にする。ただしこれらのオプションの実際の仕様は少し複雑で以下のとおりである:
threeweight
、oneweight
、bold
にはそれぞれ無効にするオプションnothreeweight
、nooneweight
、nobold
が存在して、独立に有効無効を切り替えられる。bold
>oneweight
>threeweight
となる。threeweight
が有効の場合、\ltseries
と\ebseries
が定義される。これはbold
やoneweight
には影響されない。bold
やoneweight
は既定で無効。threeweight
は既定で有効であるが、fontspecの版が古い(3ウェイトの設定がサポートされない)場合は無効になる。ignorejatype
: zxjatype/xeCJKの読込を無視し、和文サポートモードを無効にする。noignorejatype
: ignorejatype
の否定。90jis
とjis2004
の両方を否定して既定状態に戻すオプションnojisshape
を追加。haranoaji
以外の新設プリセットオプション:
nopreset
: 和文フォントのプリセット設定を行わない。mogaN-90
を追加)。恐らく現在はMogaフォントの需要はないと思われるので、詳細は笑楽する。deluxe
: nooneweight
の別名nodeluxe
: oneweight
の別名jis90
: 90jis
の別名2004jis
: jis2004
の別名match
: 何もしないオプションnoembed
: nopreset
の別名。kozuka
: kozuka-pro
の別名morisawa
: morisawa-pro
の別名hiragino
: hiragino-pro
の別名kozuka4
、kozuka6
、kozuka6n
、hiragino
、ms-dx
、ipa-dx
、hiragino-dx
が廃止。BXjsclsクラスのjafont
オプションによりzxjafontが読み込まれている場合、zxjafontにオプションを指定するにはクラスオプション(グローバルオプション)として指定すればよい。↩
厳密にいうと、プリセットの種類によってはゴシックについて「oneweight
指定時専用のウェイト」が使われる。例えば、sourcehan
プリセットではゴシックの中字は「Source Han Sans Regular」であるが、oneweight
指定時のゴシックは「Source Han Sans Medium」であり、これは「Regular」よりも若干太い。↩
luatexja-presetと異なり、zxjafontのbold
はそれ自体が単ウェイト用設定を有効化する。↩
つまり、zxjatypeとzxjafontの解説であるが、その前に一つ重要な話。
zxjatypeの本来の主要機能は「少なくともpLaTeXと同等の品質の日本語組版をXeLaTeX上で実現すること」だった。しかし、その主要機能については
もう何年も前から“壊れている”状態
にある。詳細については以下のツイッタァーのスレッドを参照されたい。
zxjatypeパッケージの目的は
— 某ZR(ざんねん🙃) (@zr_tex8r) 2019年8月9日
「xeCJKを基にして日本語の行組版規則を実現する」
ことだけど、その肝心要の機能については現状“壊れている”んだよな。それももう7年前(0.6版)から。#TeX #LaTeX #XeLaTeX
これが意味するところは、「日本語文書用のLaTeXについて、本来ならばXeLaTeXも(pLaTeX/upLaTeX/LuaLaTeXと同列の)“主要な”エンジンの地位を得ているべきであるが、残念ながら現状はそうなっていない」ということである。
もちろん、何か理由があってどうしてもXeLaTeXで日本語文書を作る必要があるのなら、その場合の最善策としてzxjatypeは十分に機能するはずであり、その意味で現状のzxjatypeにも存在意義はあるといえる。ただ、この状況は「pdfLaTeXのbxcjkjatypeパッケージ」と同じということになる。つまり、“日本語LaTeX”としてXeLaTeXはLuaLaTeXと同じ地位を得るべきところがpdfLaTeXと同じ地位に甘んじているというわけである。
ネットを見る限りでは「XeLaTeXを日本語LaTeXの主流の選択の一つにしたい」という要望は存在する。というわけでここでお願い。
だれか「XeLaTeXでまともに日本語するやつ」をつくってください。
実装の形については、zxjatypeの改良でも新しいパッケージの作製でもよく、またxeCJKを土台にするものでもしないものでも構わない。とにかく、pTeXの品質以上で基本的な日本語の行組版ができる実装があってほしいと思う。
従来の0.6版の機能については以下の記事が参考になる。
現状のzxjatypeの既定の設定においては、小書き仮名は行頭禁則処理の対象にならない。
\documentclass[autodetect-engine,ja=standard,a4paper]{bxjsarticle} \begin{document} \parbox{21\zw}{% 寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末 食う寝る処に住む処藪ら柑子の藪柑子 パイポパイポパイポのシューリンガンシューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの長久命の長助 } \end{document}
例えばこのソースをuplatexでコンパイルすると以下の出力が得られるのに対して:
同じソースをxelatexでコンパイルすると以下のようになる:
なりゆきで改行すると小書きの「ュ」の前に改行位置がくることになるが、upLaTeXではここで(緩い1)禁則が適用されて前の「シ」が追い出される。ところがxelatexでは禁則がないため「ュ」の直前で実際に改行が起こる。
zxjatypeにkanakinsoku
オプションを指定すると、小書き仮名に対して(完全な)禁則が適用される。したがって、先ほどのソースでこのオプションを追加すれば、小書きの「ュ」の前での行分割が起こらなくなる。
% グローバルで指定したkanakinsokuがzxjatypeに渡される \documentclass[autodetect-engine,ja=standard,kanakinsoku, a4paper]{bxjsarticle} \begin{document}
この場合、結果的にuplatexのときと同一の出力が得られる。
しかし、このkanakinsoku
オプションには重大な副作用がある。小書き仮名に対する行頭禁則は、内部で「小書き仮名を閉じ括弧類として扱う」ことで実現している。このため、小書き仮名と約物が並んでいると「約物同士が隣接している」と見なされて空きの調節が行われてしまうのである。これは慣習的な日本語の行組版規則に反していて好ましくない。
\documentclass[autodetect-engine,ja=standard,kanakinsoku, a4paper]{bxjsarticle} \begin{document} ベジエ(Bézier)曲線\par ベジェ(Bézier)曲線\par \end{document}
この不具合を回避するには、小書き仮名と約物の間に空のボックスを挿入する必要がある。
ベジェ\mbox{}(Bézier)曲線\par
kanakinsoku
にはこのような副作用があり、また小書き仮名の行頭禁則は一般的に必須のものとは考えられていないという事情があるため、既定で有効にはなっていない。
adjustcharclass
が有効である(既定値)場合に以下のオプションが有効になる(0.6b版以降):
kanakinsoku
: 小書き仮名に対して(完全な)行頭禁則を適用する。nokanakinsoku
(既定): kanakinsoku
の否定。小書き仮名を行頭禁則から外す。adjustcharclass
が無効の場合はxeCJKの既定設定がそのまま適用される。※xeCJKの既定における小書き仮名の禁則の設定は、昔の版ではkanakinsoku
相当であったが、2016年頃にnokanakinsoku
相当のものに変わっている。
現状の\inhibitglue
の実装は問題があるので、0.6b版以降では既定で無効になっている。これを有効にするにはuseinhibitglue
オプションの指定が必要である。
useinhibitglue
: \inhibitglue
の実装を提供する。nouseinhibitglue
: useinhibitglue
の否定。この場合、\inhibitglue
は何もしない命令になる。先述の通り、zxjatypeではxeCJKの“文字クラス”の設定を多少変更している。しかし、「文字が和文(CJK)か欧文か」の区別に関してはxeCJKの既定の設定をそのまま踏襲している。それに従うと、(u)pLaTeXやLuaTeX-jaよりも「欧文扱い」される文字が増えることになる。
例えば、次のような「☃」や「♪」の記号を含んだ文書ソースがあったとする。
\documentclass[autodetect-engine,ja=standard,jafont=haranoaji, a4paper]{bxjsarticle} \begin{document} ☃っ☃☃☃っ☃っ☃~~♪ \end{document}
LuaTeX-jaの既定ではこれらの記号は和文扱いになるため、和文フォント(原ノ味明朝)で出力される。
ところがxeCJKの既定ではこれらの記号は欧文扱いになる。現在の欧文フォント(Latin Modern Roman)には「♪」の字形はあるが「☃」はないため、結果的に「☃」が出力されないという由々しき事態に陥ってしまう。
xeCJKの「和文扱いの範囲」に関するトラブルを軽減する目的で、0.7版でprefercjk
というオプションが導入された。このオプションを指定すると、「和文扱い」になる文字の範囲がLuaTeX-jaの既定により近いものに変更される2。
% グローバルで指定したprefercjkがzxjatypeに渡される \documentclass[autodetect-engine,ja=standard,jafont=haranoaji, prefercjk,a4paper]{bxjsarticle} \begin{document} ☃っ☃☃☃っ☃っ☃~~♪ \end{document}
0.7版以降で追加された。
prefercjk
:「和文扱いの文字」の範囲をLuaTeX-jaのそれに近づける。noprefercjk
(既定): prefercjk
の否定。xeCJKの既定に従う。※このオプションは実験的で、仕様は将来変更される可能性がある。
(つづけ)
今年の年賀状。
以前に述べたとおり、年賀状にはその年の数に関連した数学パズルを載せるのが通例である1。しかし去年はパズルを作っている時間が2時間しかなかったので2、割と普通の(マジで)虫食い算で済ませた。
肝心のパズル問題の部分の文字が小さくで読みづらいが、以下のように書かれている。
以下の条件に従って、乗算の虫食い算を解きなさい。
- ■には0または2が入る。
- □には0と2以外の数字が入る。
一番上にあるのはチェロキー語での新年の挨拶。
ぱんどっくのマニュアルを読破するのに時間を取られている人が多いためか、年を追うごとに年賀状で数学パズルを見ることが少なくなっているようで感じる。↩
そのうち本腰を入れて数学パズルを作りたいですね……。↩