最近のTeXエンジンは,-shell-escape が有効な状態のときに,
\input|"command args" % plain TeX
\@@input|"command args" % LaTeX
とすることで,外部コマンドの標準出力をそのままソースに流し込むことができます。
この機能を用いてTeXソースをコンパイルしている最中に,TeXエンジン(コンパイラ)が Abort trap 6 で落ちるという,比較的珍しいエラーに遭遇しました。
「問題が再現する最小限のソース」まで切り詰めてみたところ,次のソースに至りました。plain TeX documentです。
\input|"echo '\string\openin0.'"
\input|""
\bye
このソースを
$ ptex -shell-escape sample
でコンパイルしようとすると,次のように Abort trap 6 で落ちます(TeX Live 2014 on Mac OS X 10.9 で確認)。
This is pTeX, Version 3.14159265-p3.5 (utf8.euc) (TeX Live 2014) (preloaded format=ptex)
\write18 enabled.
(./sample.tex (./sample.tex)Assertion failed: (s != 0), function maketexstring, file ../../../texk/web2c/lib/texmfmp.c, line 2558.
Abort trap: 6
pTeX系列の (e)(u)pTeX の4種類のエンジン,および XeTeX でも再現しました。
一方,pdfTeX や LuaTeX では発生しませんでした。
なお,LaTeXでも同様です。
\documentclass{article}
\begin{document}
\makeatletter
\@@input|"echo '\string\openin0.'"
\@@input|""
\end{document}
$ platex -shell-escape sample2
This is e-pTeX, Version 3.14159265-p3.5-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=platex)
\write18 enabled.
entering extended mode
(./sample2.tex
pLaTeX2e <2006/11/10> (based on LaTeX2e <2014/05/01> patch level 0)
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/Applications/TeXLive/texlive/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/Applications/TeXLive/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(./sample2.aux) (./sample2.aux)Assertion failed: (s != 0), function maketexstring, file ../../../texk/web2c/lib/texmfmp.c, line 2558.
Abort trap: 6
この現象の原因はよく分かりませんが,普通はこんなことはあまりしないので,実害は少ないでしょう。
#追記 (2014/07/19)
問題の texmfmp.c を角藤先生が改修してくださいました。次の TeX Live 2015 では修正されるはずです。
#追記 (2015/09/10)
同様の案件をもう一件見つけました。