マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

xeCJK の便利かもしれない機能の話

xeCJK 3.x 版に対応した ZXjatype(0.6 版)を正式にリリースしました。

当然であるが、ZXjatype は xeCJK に「日本語用の設定」を加えたものであるから、xeCJK の高度な機能を知ることは ZXjatype を使う上でも有用である。ここでは、「奥底」のページで述べたもの以外の、xeCJK 3.0 版の新しい機能*1を紹介する。

verbatim 出力での空き補正

verbatim 出力においては、通常の(約物の周りの)空き補正が抑止され、代わりに、全ての和文文字が「欧文等幅フォントの 2 文字分」の幅になるように空き補正が行われる。これで、いわゆる「端末の等幅表示」を模した出力が可能になる。


% 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage{xeCJK,yaclabo}
\setCJKmainfont{IPAMincho}
\setmonofont{TeX Gyre Cursor}
\setCJKmonofont{IPAGothic}
\begin{document}
\begin{quote}\begin{verbatim}
lang_set = {
["English"] = lang.en,
["Français"] = lang.fr,
["Español"] = lang.es,
["日本語"] = lang.ja,
["中文"] = lang.zh,
}
\end{verbatim}\end{quote}
\end{document}

verbatim 出力以外の等幅ファミリ(\ttfamily)での出力でも、\CJKfixedspacing 命令を実行するとこの「verbatim 用の空き補正」が実施される。

ただし現時点では次のような不具合があるように見える。

  • 和文文字の隣に欧文空白があると、そこでの空き補正が不正になり、以降の出力がずれてしまう。
  • 和文フォントにスケール(Scale 属性)が適用されていると失敗する。((だから和文にスケールが適用することが前提の zxjatype と相性が悪いことになる。\setCJKmonofont では和文用スケールを適用しないことを検討している。))
和文フォントのフォールバック

以前に「フォントにない文字を別のフォントで補う〜xeCJKの場合〜」の記事で「zxjafbfont パッケージ」として実現した機能が、今の xeCJK には標準で備わっている。

ある和文ファミリに対するフォールバック用ファミリ、つまり「そのフォントにない文字を出すためのフォント」を指定する方法は幾つかあるが、最も単純なのは、フォントファミリ定義(\setCJK...font 命令)の「FallBack 属性」として記述する方法である。


% 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage{xeCJK}
% 和文 \rmfamily は「IPA明朝」, ただしそこに所望の文字のグリフが
% ない場合は代わりに「花園明朝」で出力する
\setCJKmainfont[FallBack=花園明朝A]{IPA明朝}
\begin{document} % 初期状態ではフォールバックは無効
我的气垫船充满了鳝鱼!\par
\xeCJKsetup{AutoFallBack=true} % フォールバックを有効にする
我的气垫船充满了鳝鱼!\par
\xeCJKsetup{AutoFallBack=true} % フォールバックを無効にする
我的气垫船充满了鳝鱼!\par
\end{document}

ただし、この指定方法ではフォールバック用のファミリに属性(Scale 等)が指定できない。属性に値無しの FallBack を指定する方法もあり、この場合、その定義対象がフォールバック用ファミリに変わる。この方法ではフォールバックに属性を指定することができる。


% 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage[AutoFallBack=true]{xeCJK} % 初期でフォールバックを有効化
\setCJKmainfont[Scale=0.925]{IPA明朝}
\setCJKmainfont[FallBack,Scale=0.925,Color=000099]{花園明朝A}
\begin{document}
我的气垫船充满了鳝鱼!\par
\end{document}

*1:ただし 3.0 版で初めて加わったものではなく 2.4 版辺りから存在するが、3.0 版で仕様が変更・拡張されているので、ここでは 3.0 版を前提にする。