マクロツイーター

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

bxcjkjatype の autotilde はソレじゃない件(1)

……なんか、誤解をしている人がいる気がするので。

  • CJK パッケージによる和文組版では、和欧文間空白(四分空き)を自動的に挿入する機能はない。bxcjkjatype パッケージや BXJS クラスを用いた場合も自動挿入はサポートされない。
  • CJK パッケージにおいて和欧文間空白を入れたい場合は、CJK(*) 環境内で \CJKtilde という命令を実行した上で、チルダ~〉を書く。
  • bxcjkjatype パッケージの autotilde オプションは「CJK(*) 環境に入ったら自動的に \CJKtilde を発行する」ためのものである。
  • なので、結局、チルダ~〉を手動で入れる必要がある。

以下、この事項(および CJK パッケージでの和欧文間空白の取扱)について詳しく解説する。

CJK パッケージで和欧文間空白する

(u)pLaTeX和文組版では、和文と欧文の間に小さな空白(和欧文間空白)が自動的に挿入されるようになっている。

% upLaTeX 文書, 文字コードは UTF-8
\documentclass[uplatex,a4paper]{jsarticle}
\begin{document}
% "四分空き"が入る
{up\LaTeX}で日本語する件。
\end{document}

XeLaTeX + xeCJK や LuaLaTeX + LuaTeX-ja を使った場合も同様に和欧文間空白が自動挿入される。ところが、(pdf)LaTeX + CJK パッケージでは和欧文間空白を自動挿入する機能が存在しない。このため、ソースを (u)pLaTeX と同じように書くと和欧文間空白が入らない状態で出力されてしまう。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage{CJKutf8,CJKspace,CJKpunct}
\begin{document}
\begin{CJK*}{UTF8}{ipxm}
% 四分空きが入らない!
{pdf\LaTeX}で日本語する件。
\end{CJK*}
\end{document}

それでは、CJK パッケージでは“和欧文間空白”について何も考慮されていないのかというと、決してそんなことはなく、次のようにして和欧文間空白を挿入できる。まず CJK(*) 環境の中で \CJKtilde という命令を実行する。これでチルダ~〉命令の意味が(LaTeX 標準の「非分割欧文空白」から)「和欧文間空白」に変わるので、あとは和欧文間に〈~〉を入れればよい。つまり文書ソースは以下のようになる。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage{CJKutf8,CJKspace,CJKpunct}
\begin{document}
\begin{CJK*}{UTF8}{ipxm}\CJKtilde
% "~"で四分空きを入れる
{pdf\LaTeX}~で日本語する件。
\end{CJK*}
\end{document}

まとめると、CJK パッケージの和欧文間空白関連の機能は以下のようになっている。

  • \CJKtilde : 〈~〉の意味を「和欧文間空白」に変える。
  • \standardtilde : 〈~〉の意味を LaTeX 標準の「非分割欧文空白」に変える。
  • \nbs : 「非分割欧文空白」を挿入する命令。\CJKtilde の状態で、“本来の〈^〉”の意味を使いたいときに使う。
bxcjkjatype で和欧文間空白する話

CJK パッケージの和欧文間空白の仕組は bxcjkjatype パッケージでもそのまま受け継がれている。((uCJK* 環境は bxcjkjatype の機能の一つで和文フォント連動の機能を備えた CJK* 環境。))

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage{bxcjkjatype}
\begin{document}
Here's an example.
\begin{uCJK*}\CJKtilde
{pdf\LaTeX}~で日本語する件。%
\end{uCJK*}

And more.
\begin{uCJK*}\CJKtilde
文字コードは~UTF-8~にする。%
\end{uCJK*}
\end{document}

しかし、日本語を含む箇所が大量にある場合、CJK 環境((CJK(*) および uCJK(*) 環境のこと。))に入る都度に \CJKtilde を実行するのは煩わしい。このため、bxcjkjatype では「CJK 環境に入ると自動的に \CJKtilde を発行する」機能を持たせている。それが autotilde オプションなのである。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage[autotilde]{bxcjkjatype} % autotilde 指定
\begin{document}
Here's an example.
\begin{uCJK*}% 自動で \CJKtilde の状態になる
{pdf\LaTeX}~で日本語する件。%
\end{uCJK*}

And more.
\begin{uCJK*}%
文字コードは~UTF-8~にする。%
\end{uCJK*}
\end{document}

whole オプションと autotilde を併用した場合は、本体開始時(\begin{document} の所)において自動的に uCJK* 環境が開始するので、そこで \CJKtilde が発行されることになる。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage[whole,autotilde]{bxcjkjatype}
\begin{document}
{pdf\LaTeX}~と~bxcjkjatype~で日本語できる。
文字コードは~UTF-8~にする。
\end{document}

なお、bxcjkjatype パッケージでは*1\CJKecglue という命令が「和欧文間空白を入れる命令」の実体となっている。だから、「チルダ~〉の意味が変わってしまうのはアレなので、代わりに、ゆきだるま〈☃〉で和欧文間空白を入れることにしよう」と思った場合は次のようにして実現できる。

% pdfLaTeX 文書, 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage[whole]{bxcjkjatype}% autotilde は無し
\usepackage{newunicodechar}
\newunicodechar{}{\CJKecglue}%〈☃〉で和欧文間空白
\begin{document}
{pdf\LaTeX}☃と☃bxcjkjatype☃で日本語できる。
\end{document}

また、この \CJKecglue を再定義することで、和欧文間空白(四分空き)の量を変更できる。初期値は文字通り“四分”(\hspace {0.25em plus 0.125em minus 0.08em})であるが、これを“八分”くあいにしたい場合は次のようにする。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[a4paper]{article}
\usepackage[whole,autotilde]{bxcjkjatype}
% 和欧文間空白を"八分"にする
\renewcommand*{\CJKecglue}{\hspace{0.125em minus 0.075em}}
\begin{document}
{pdf\LaTeX}~と~bxcjkjatype~で日本語できる。
\end{document}
BXJS クラスで和欧文間空白する話

pdfLaTeX 上で BXJS クラス(BXjscls パッケージの文書クラス)の“標準設定”(ja=standard)を使用した場合は、bxcjkjatype が wholeautotilde 付で読み込まれる。従って、和欧文間空白については手動でチルダ~〉を入れる必要がある。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[pdflatex,a4paper,ja=standard]{bxjsarticle}
\begin{document}
{pdf\LaTeX}~と~bxcjkjatype~で日本語できる。
\end{document}

もし、(ゆきだるま使用等の理由で)autotilde の設定が不要である場合は、文書本体の先頭(\begin{document} の直後)で \standardtilde を実行すればよい。

% pdfLaTeX 文書, 文字コードUTF-8
\documentclass[pdflatex,a4paper,ja=standard]{bxjsarticle}
\usepackage{newunicodechar}
\newunicodechar{}{\CJKecglue}
\begin{document}
\standardtilde % 自動挿入の \CJKtilde を打ち消す
{pdf\LaTeX}☃と☃bxcjkjatype☃で日本語できる。
\end{document}
続く

*1:CJK パッケージでは、でないことに注意。