由于 T1 fontenc 和 latin1 日志文件导致的 tinytex 警告

tinytex warnings due to T1 fontenc and latin1 log file

提问人:Achim Zeileis 提问时间:9/14/2023 最后编辑:Achim Zeileis 更新时间:9/18/2023 访问量:102

问:

问题

我在具有 (a) UTF-8 编码、(b) T1 字体编码、(c) 包含重音字符的 hbox 的过满 hbox 的文件上运行。这将创建一个采用 latin1 (ISO-8859-1) 编码的日志文件,从而导致 发出警告。tinytex::latexmk()tinytex

可重复的示例

tinytex::latexmk("tiny.tex")
## [1] "tiny.pdf"
## Warning messages:
## 1: In xfun::read_utf8(log) :
##   The file tiny.log is not encoded in UTF-8. These lines contain invalid UTF-8 characters: 51
## 2: In grep("^(LaTeX|Package [[:alnum:]]+) Warning:", x) :
##   unable to translate 'r/bx/n/10 vari-able di-cot<f3>mica\T1/cmr/m/n/10 . ' to a wide string
## 3: In grep("^(LaTeX|Package [[:alnum:]]+) Warning:", x) :
##   input string 51 is invalid

其中包含tiny.tex

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\begin{document}
\begin{itemize}
\item In this line we get an overfull hbox because the word \textbf{variable dicotómica}.
\end{itemize}
\end{document}

系统信息

R 4.3.1 在 Debian/GNU Linux(测试)系统上使用 0.46 和 0.40 以及 TeXLive 2023.20230613-3,运行 en_US。UTF-8 语言环境。未安装 TinyTeX 发行版,即 R 包调用系统 TeXLive。不过,我们在 Windows 系统上也看到了同样的问题tinytexxfuntinytex

解决方法

我可以通过不使用 T1 字体编码来避免这个问题,即省略或注释 .然后使用 OT1 字体编码,并且有关已满 hbox 的日志消息为 ASCII。tiny.tex

问题

我能做些什么来获取 UTF-8 格式的日志消息吗?还是必须处理它(例如,通过读取字节然后使用 )?tinytexiconv()

R UTF-8 乳胶 ISO-8859-1 Tinytex

评论

1赞 llrs 9/14/2023
使用 texlive 编译 .tex 文件时会发生什么情况?tiny.log 是 UTF-8 吗?如果我没记错的话,它会保留 .log 文件,但我不记得它是否是 UTF-8。
0赞 Achim Zeileis 9/14/2023
如果我在命令行上运行,我还会得到 ISO-8859-1 (latin1) 日志文件。您也可以在执行此操作时保留该文件。pdflatex tiny.textinytextinytex::latexmk("tiny.tex", clean = FALSE)
0赞 llrs 9/14/2023
然后它看起来像一个错误:tinytex 假设 .log 文件是 UTF-8 的,而很明显它不是(使用 texlive)。您可以将警告转换为错误,并查看它如何到达以读取文件tinytext -> xfun::read_utf8
0赞 Achim Zeileis 9/14/2023
是的,理想情况下应该更优雅地处理这个问题。它用于读取日志文件。在内部,这是无条件使用的,但事后会通过检查,如果发现日志不是 UTF-8,则触发警告。我不确定的是,我是否可以通过为 pdflatex 设置一些选项来避免 ISO-8859-1 日志文件。tinytexxfun::read_utf8()readLines(con, encoding = "UTF-8", warn = FALSE)validUTF8()

答:

0赞 Achim Zeileis 9/18/2023 #1

(部分答案基于塞巴斯蒂安·迈耶(Sebastian Meyer)的名单外反馈:)

日志消息实际上不是 latin1 编码的。相反,它包含用于排版的字符的表示形式,文本编辑器和类似工具可以将其解释为拉丁语1。在pdfLaTeX中,这是无法避免的(仅在LuaLaTeX或XeLaTeX中)。

{TeX} 中解释了详细信息:什么控制了 LaTeX 日志文件的编码 - 以及如何更改它? 在恩里科·格雷戈里奥(Enrico Gregorio)的回答和大卫·卡莱尔(David Carlisle)的进一步评论中。在此讨论中,建议将日志文件读取为字节(而不是 UTF-8 编码文件)。