如何让 LaTeX 在命令行中输出 UTF8 字符?

如何让 LaTeX 在命令行中输出 UTF8 字符?

对于脚本,我想要获取 LaTeX 选择的连字符,包括我的自定义连字符文件。

我使用这个代码并且它主要起作用:

echo "\\\documentclass{standalone}
\\\usepackage[T1]{fontenc}
\\\usepackage[utf8]{inputenc}
\\\usepackage[ngerman]{babel}
\\\input{headers/hyphenation.tex}
\\\showhyphens{Nahrungsmittelunverträglichkeit}" | pdflatex | grep -a "T1/cmr/m/n/10" | sed -e 's/.*T1\/cmr\/m\/n\/10\s*//'

对于大多数内容,这种方法都有效,并且只返回该单词的连字符版本。但是,当单词中\showhyphens包含变音符之类的内容时,它会用 UTF8 替换字符替换它们。

如果我没有将其导入(pdf)LaTeX,则不会发生这种情况,因此我猜测字符已正确提交给 LaTeX。但 LaTeX 无法正确将它们输出到控制台。

如何让 LaTeX 正确显示这个而不是

Nah-rungs-mit-te-lun-ver-tr�g-lich-keit

答案1

TeX 中的连字符(不幸的是)与字体编码。您正在使用T1\showoutput显示字符的内部框表示,因此您的输入是utf-8或甚至是 的事实ä早已不复存在。T1显示的内部编码与 有相似之处,latin-1但完全不同UTF-8,并且此框记录内置于引擎中,无法通过宏层(例如)进行自定义latex

LaTeX 可以utf8通过以下方式在终端上输出

\typeout{\detokenize{Nahrungsmittelunverträglichkeit}}

但输出的是完全不同的东西,即输入字符标记,而不是内部框表示。


如果我把你的脚本改成

echo "\\documentclass{standalone}
\\usepackage[$1]{fontenc}
%\\usepackage[utf8]{inputenc}
\\usepackage[ngerman]{babel}
%\\input{headers/hyphenation.tex}
\\showhyphens{Nahrungsmittelunverträglichkeit}" | $2

然后

. test OT1 pdflatex

生产

[] \OT1/cmr/m/n/10 Nah-rungs-mit-te-lun-vertr^^?aglichkeit

. test T1 pdflatex

生产

[] \T1/cmr/m/n/10 Nah-rungs-mit-te-lun-ver-tr�g-lich-keit

. test TU xelatex

生产

\TU/lmr/m/n/10 Nah-rungs-mit-te-lun-ver-träg-lich-keit

因此,您会看到同一输入的三种不同的内部表示,其中xetex一种本质上是 unicode 文本,因此可以自然显示。

相关内容