マクロツイーター

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

アクセント合成済文字を避ける

コレについて。

Type1 フォントの合成清字形(←これが seac を使っている)でなくて、TeX 上の合成で事足りるのであれば、アクセント自動置換をごまかして TeX 上の合成を強制することにすればよいでしょう。

何らかの理由でフォントに含まれるアクセント合成済文字を避けて TeX でアクセント合成を行うことを強制したい場合がある。参照先のページの場合は「dvipdfmx のバグを避ける」ためであるが、ここでは別の例を挙げる。

T1 エンコーディングで〈d〉にキャロン〈ˇ〉(\v)を付けると、d の後に狭いアポストロフィに似た記号を置いた字形で出力される。*1Unicode で d にキャロンを付けた文字は U+010F〈ď〉だが、やはり多くのフォントではアポストロフィの字形で作られている。)しかし何かの理由で「d にキャロンを乗せた字形」で出力させたいとする。

\v{d} と入力して単純に TeX のアクセント合成の処理が行われないのは、T1 での \v の定義において、「引数が『d』であればアクセント合成を行う代わりに合成済文字(符号位置 0xA4)を出す」という処理が組み込まれているからである。従って、\v の引数に \empty を混ぜて引数が「d」でないように見せかければよい。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\begin{document}
\v{d} / \v{\empty d}
\end{document}

次のように細工をすると、「合成しない \v」を \v* で入力できるようになる。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\newcommand*{\TeXAccent}[2]{#1{\empty#2}}
\DeclareTextCompositeCommand{\v}{T1}{*}{\TeXAccent\v}
\begin{document}
\v{L}a\v{d}a\v{t}a\v{l}a! / \v*{L}a\v*{d}a\v*{t}a\v*{l}a!
\end{document}

[補足] 合成済文字でなく TeX でのアクセント合成を使う場合のデメリットについても述べておく。主要なものは次の 2 つである。

  1. PDF に変換した時に文字情報が不正になる。
  2. 分綴(hyphenation)が合成文字の個所では行われなくなる。

もちろん、英語の分綴にはアクセント付文字は関与しないので、2 の欠点は babel を導入して英語以外の分綴を行う場合にのみ影響する。なお、「VF で合成したフォントを使用した」場合は、2 は該当しないが、1 の欠点は残っている。

*1:これはチェコ語の印刷物での習慣に従ったもの。そのままキャロンを d の上に乗せると字形が高くなり過ぎることへの対策。