T1とT2Aエンコーディングについて

T1とT2Aエンコーディングについて

- 斎藤 漁火 の投稿
返信数: 3

初めまして、当方TeXで縦書きする方法について初心者向けに解説している者です。


このページと同じ疑問を持ちましたので質問いたします。

fonts - Why to use [T2A, T1] when [T2A] is enough? - TeX - LaTeX Stack Exchange


TeX Live2017の中のupLaTeXを使っているのですが、

デフォルトで(この場合は)縦向きに組まれてしまうéなどのアクセントつきアルファベットや、

キリル文字・ギリシャ文字を欧文と同様横倒しにして組むために、

pxcjkcatパッケージを導入の上以下のように設定しました。


\documentclass{utbook}

\usepackage[T2A,T1]{fontenc}

\usepackage{textcomp}

\usepackage[utf8]{inputenc}

\usepackage[prefernoncjk]{pxcjkcat}

\cjkcategory{sym18,sym19}{cjk}

\usepackage[russian,english,japanese]{babel}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

caféで

\foreignlanguage{russian}{Братья Карамазовы})において、


この場合、フォントエンコーディングを切り替えるためにBabelパッケージの\foreignlanguageコマンドが必須で、これを外すとエラーが出ます。

LaTeX Error: Command \CYRB unavailable in encoding T1.

See the LaTeX manual or LaTeX Companion for explanation.

Type H <return> for immediate help. ...

l.24 Б

しかし、T1エンコーディングを外してT2Aエンコーディングのみにすると、

Babelのコマンドで囲まず本文中に直接キリル文字を書いてもきちんと組まれます。

しかもその時、éなどのT1エンコーディングに含まれる文字も正しく欧文として表示されます。

T1とT2Aエンコーディングは最初の128文字のコードポイントだけが同じで、

それ以降の対応は異なっているはずなのですが、

どなたかこの挙動を説明できる方はいらっしゃいますでしょうか。


この場合T2Aだけを使えばT1を使う必要がない気がします。

併用しなければならない理由はありますか?

斎藤 漁火 への返信

Re: T1とT2Aエンコーディングについて

- aminophen の投稿
> T1エンコーディングを外してT2Aエンコーディングのみにすると、
> Babelのコマンドで囲まず本文中に直接キリル文字を書いてもきちんと組まれます。
> しかもその時、éなどのT1エンコーディングに含まれる文字も正しく欧文として表示されます。

> この場合T2Aだけを使えばT1を使う必要がない気がします。
> 併用しなければならない理由はありますか?

併用しなければ「ならない」かどうかは個人の判断によりますが,私は併用した方が「良い」と思います。
理由は,テキストをコピペした時の文字情報が違うからです。uplatex + dvipdfmx で処理してできた PDF を
Adobe Acrobat Pro DC で開いた場合の結果は以下の通りです。

[A] \usepackage[T2A]{fontenc} の場合:

café で
Братья Карамазовы において、

[B] \usepackage[T2A,T1]{fontenc}

caf´e で
Братья Карамазовы において、

このように違いが出てきます。

> T1とT2Aエンコーディングは最初の128文字のコードポイントだけが同じで、
> それ以降の対応は異なっているはずなのですが、

é は T1 エンコードの "E9(16進数表記;10進数だと 233)で,128 以上です。OT1 にはこの文字がありません。
T1 を指定しない場合,LaTeX は OT1 の範囲内で é を出さざるを得ず,合成文字で出した結果,
文字情報が違ってくるのです。
斎藤 漁火 への返信

Re: T1とT2Aエンコーディングについて

- aminophen の投稿
すみません,すぐ上の [A] と [B] のコピペの結果が逆です。キリル文字部分も不要です。

もう少し追加で説明します。

inputenc / fontenc で一度に扱える欧文文字は 256 個までですが,
英語のアルファベット+記号+キリル文字とウムラウト
の時点で既に足りません。したがって,128〜255 番のスロットには
* T1 エンコード:ウムラウトはあるがキリル文字はない
* T2A エンコード:キリル文字だけはあるがウムラウトはない
となっています。

また,fontenc に複数のエンコードを指定した場合,後に指定したものほど強い効力を持ちます。
つまり \usepackage[T2A,T1]{fontenc} は T1 を選んだ状態です。

> \usepackage[T2A,T1]{fontenc}
> この場合、フォントエンコーディングを切り替えるためにBabelパッケージの\foreignlanguageコマンドが必須で、
> これを外すとエラーが出ます。
> LaTeX Error: Command \CYRB unavailable in encoding T1.
> しかし、T1エンコーディングを外してT2Aエンコーディングのみにすると、
> Babelのコマンドで囲まず本文中に直接キリル文字を書いてもきちんと組まれます。

Б などのキリル文字は T1 になく,\CY… などの命令で出すほかないのですが,この命令が使えるのは
T2A が選ばれた時だけですから,T1 を選んだ状態では当該のエラーになります。
\foreignlanguage{russian}{…}
とするとその中身は T2A を選んだ状態になるため,キリル文字を出せます。

> しかもその時、éなどのT1エンコーディングに含まれる文字も正しく欧文として表示されます。

な理由は,é という文字は T2A には含まれない一方で,0〜127 番の文字を合成することで見かけ上・印刷上は
事足りるからです(文字情報は不正になりますが)。

もしキリル文字を使う部分とウムラウトを使う部分が分かれているのであれば,
以下のようにすると \foreignlanguage せずに済み,少し楽でしょう。

\documentclass{utbook}
\usepackage[T2A,T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\usepackage[prefernoncjk]{pxcjkcat}
\cjkcategory{sym18,sym19}{cjk}
\usepackage[russian,english,japanese]{babel}
\begin{document}

\fontencoding{T1}\selectfont % ここから下は T1 を選んだ状態
caféで

\fontencoding{T2A}\selectfont % ここから下は T2A を選んだ状態
Братья Карамазовыにおいて、

\end{document}
aminophen への返信

Re: T1とT2Aエンコーディングについて

- 斎藤 漁火 の投稿
よく分かりました。合成していたから無い字もあるように見えただけなんですね。
(考えてみれば当然のことでした)
部分的なエンコード指定も大変参考になりました。
この方法でやってみます。ありがとうございます。