![如何让 LaTeX 在命令行中输出 UTF8 字符?](https://linux22.com/image/378219/%E5%A6%82%E4%BD%95%E8%AE%A9%20LaTeX%20%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E8%BE%93%E5%87%BA%20UTF8%20%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
对于脚本,我想要获取 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 文本,因此可以自然显示。