什么控制 LaTeX 日志文件的编码 – 以及如何更改它?

什么控制 LaTeX 日志文件的编码 – 以及如何更改它?

我有一个 UTF-8 编码的 LaTeX 文档:

\documentclass{article}
\usepackage[utf8]{inputenc}         
\usepackage[T1]{fontenc}           

\begin{document}
  äääääääääääääääööööööööööööööööööööööüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüääääääääääääääääääääääääääääääääääüüüüüüüüüüüüüü
\end{document}

pdflatex当在 MacOS X 上使用 UTF-8 语言环境的终端上编译此程序时,(预期的)overfull \hbox警告以 Latin1 编码出现 – 在终端和日志文件中:

This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/MacPorts 2013_1) (format=pdflatex 2013.7.29)  2 SEP 2013 17:28
entering extended mode
 restricted \write18 enabled.
 %&-line parsing enabled.
**test

<SNIP>

Overfull \hbox (419.53918pt too wide) in paragraph at lines 7--8
[]\T1/cmr/m/n/10 äääääääääääääääööööööööööööööööööööööüüüüüüüüüüüüüüüüüüüüüüüüü
üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüääääääääääääääääääääääääääääääääääüüüüüüüüüüüüüü

 []

[1

{/opt/local/var/db/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./test.aux) ) 
Here is how much of TeX's memory you used:
 617 strings out of 494181
 5593 string characters out of 6156676
 52409 words of memory out of 5000000
 3964 multiletter control sequences out of 15000+600000
 4403 words of font info for 15 fonts, out of 8000000 for 9000
 470 hyphenation exceptions out of 8191
 23i,4n,17p,299b,113s stack positions out of 5000i,500n,10000p,200000b,80000s
{/o
pt/local/share/texmf-texlive/fonts/enc/dvips/cm-super/cm-super-t1.enc}</opt/loc
al/share/texmf-texlive/fonts/type1/public/cm-super/sfrm1000.pfb>
Output written on test.pdf (1 page, 12195 bytes).
PDF statistics:
 13 PDF objects out of 1000 (max. 8388607)
 8 compressed objects within 1 object stream
 0 named destinations out of 1000 (max. 500000)
 1 words of extra memory for PDF output out of 10000 (max. 10000000)

我正在对日志文件使用后过滤程序(即pydflatex由 Olivier Verdier 编写的程序需要 UTF-8 编码输入,因此在这一行处中断。

那么,什么决定了 LaTeX 日志文件的编码?我该如何改变它?

答案1

使用 LaTeX(与 LuaLaTeX 和 XeLaTeX 相反)的 Unicode 输入无法在内部处理中保留,尤其是在显示有关过满框的消息时会丢失。

这些消息显示的是实际用于排版的字符的表示,它们不再是 Unicode,而是对应于当前输出编码中的插槽。

例如,ä成为第一是\"a因为

\DeclareUnicodeCharacter{00E4}{\"a}

然后与 T1 编码utf8enc.dfu相关的宏将其翻译为“在插槽中打印字符”,因为fontenc0xE4

\DeclareTextComposite{\"}{T1}{a}{228}

t1enc.def十进制的 228 是十六进制的0xE4)。这实际上是 Latin-1 中的相同位置ä,但 T1 编码与 Latin-1 不同;例如,ß位于 0xFFT1 中的位置 255 =,而在 Latin-1 中位于位置 223 = 0xDF

您需要的是一个过滤器,用于将 T1(或其他输出编码)转换回 Unicode。该过滤器还应考虑所使用的字体,该字体的名称中包含输出编码:这不是一项简单的任务,尤其是对于数学符号而言。

相关内容