(e)-(u)pTeX において読み込む TCX ファイルの指定方法

(e)-(u)pTeX において読み込む TCX ファイルの指定方法

- yudai-nkt の投稿
返信数: 3

次のような plain TeX ファイルを用意してタブ文字を foo.out に書き込もうとすると,pdfTeX と LuaTeX では意図通りタブ文字が書き込まれる一方で,(e)-(u)pTeX では 2 行とも ^^I が書き込まれます(XeTeX と Knuthian TeX も同様です).

\newwrite\tmp
\immediate\openout\tmp=foo.out
\begingroup
  \catcode`\^^I=12  % ASCII TAB
  \immediate\write\tmp{^^I}
  \immediate\write\tmp{ }  % ブレース内はタブ文字をベタ書き
\endgroup
\immediate\closeout\tmp
\bye

TeX.SX のこの回答によると,TCX ファイルというものによって左右されるそうで,TUG の Web サイトに従って %& -translate-file=cp227.tcx をファイル冒頭に加えると,ログを見る限りは

This is pTeX, Version 3.14159265-p3.7.1 (utf8.euc) (TeX Live 2017) (preloaded format=ptex 2017.11.17)  25 NOV 2017 10:09
 restricted \write18 enabled.
 %&-line parsing enabled.
 (/usr/local/texlive/2017/texmf-dist/web2c/cp227.tcx)
**mwe.tex
(./mwe.tex
\tmp=\write0
\openout0 = `foo.out'.

 )
No pages of output.

cp227.tcx が読み込まれていそうなのですが,foo.out には依然 ^^I が書き込まれています.一方で cp227.tcx を使用したフォーマットを作成して利用すると,タブ文字が書き込まれます.

XeTeX で同様のことをすると (WARNING: translate-file "cp227.tcx" ignored) と警告が出て,Knuthian TeX ではそもそも %&-line parsing enabled. になりませんでした.TUG の Web サイトに記載されていた方法がいずれのエンジンでも機能しないのですが,すくなくとも (e)-(u)pTeX においてはどのようにすれば TCX ファイルの指定ができるのでしょうか?この件で TCX ファイルというものをはじめて知ったこともありほとんど何も知らないので,「そもそも (e)-(u)pTeX で cp227.tcx を読み込むのは危険だ」などということがあれば,あわせてご教授いただければ幸いです.

なお,OS X EL Capitan 上で TeX Live 2017 を使用しています.


何故このようなことをしているのかが見えづらいと思うので簡単に理由を述べますと,TikZ パッケージの external ライブラリが提供する Makefile 生成機能を upLaTeX においても利用可能にしたいのがそもそもの動機です.

yudai-nkt への返信

Re: (e)-(u)pTeX において読み込む TCX ファイルの指定方法

- Akira Kakuto の投稿
> と cp227.tcx が読み込まれていそうなのですが,foo.out には依然
> ^^I が書き込まれています.一方で cp227.tcx を使用したフォーマットを
> 作成して利用すると,タブ文字が書き込まれます.

Runtime に TCX ファイルを読み込んで,有効にするには,
enctex.ch を使っていることがおそらく必要だと思います。
これは,エンジンとしては Knuthian TeX と pdfTeX だけが使用して
いて,(e)pTeX, (e)upTeX では使用していません(おそらくできない)。

> XeTeX で同様のことをすると (WARNING: translate-file "cp227.tcx"
> ignored) と警告が出て,

XeTeX, Aleph は TCX をサポートしていません。

> Knuthian TeX ではそもそも %&-line parsing enabled.
> になりませんでした.

Knuthian TeX では parse first line は意図的に使用不可になって
います。しかし コマンドラインオプションは使えるので
tex -translate-file=cp227.tcx test.tex
は可能です。試して下さい。

> TUG の Web サイトに記載されていた方法がいずれのエンジンでも
> 機能しないのですが,

上に述べた理由により,Knuthian TeX (コマンドラインオプション)
pdftex (etex も一緒) では機能します。format を
cp227.tcx を使わないで作成し,runtime に読ませて機能することを
確認しました。

> すくなくとも (e)-(u)pTeX においてはどのようにすれば TCX ファイルの
> 指定ができるのでしょうか?

Runtime は無理で,format 再作成しなければいけないと思います。

> この件で TCX ファイルというものをはじめて
> 知ったこともありほとんど何も知らないので,
> 「そもそも (e)-(u)pTeX でcp227.tcx を読み込むのは危険だ」
> などということがあれば,あわせてご教授いただければ幸いです.

これは他の詳しい方にパスします。
Akira Kakuto への返信

Re: (e)-(u)pTeX において読み込む TCX ファイルの指定方法

- Akira Kakuto の投稿
> Knuthian TeX では parse first line は
> 意図的に使用不可になっています。

これは,デフォルトでは使用できないという意味であって,
--parse-first-line
なるコマンドラインオプションを付けると,Knuthian TeX
でも %&-line parsing enabled. になります。
Akira Kakuto への返信

Re: (e)-(u)pTeX において読み込む TCX ファイルの指定方法

- yudai-nkt の投稿

詳細な回答ありがとうございます,疑問に思っていた点が解決しました.また,

Knuthian TeX では [...] コマンドラインオプションは使えるので tex -translate-file=cp227.tcx test.tex は可能です。試して下さい。

--parse-first-line なるコマンドラインオプションを付けると,Knuthian TeX でも %&-line parsing enabled. になります。

についても動作するのが確認できました.

TikZ での実用上は cp227.tcx が必要な文書だけ自分で作成したフォーマットをしばらくは利用してみて,何か不具合が出た場合には諦めて Makefile の修正に外部ツールを使うなり LuaTeX-ja に移行するなりしようと思います.