提问人:Achim Zeileis 提问时间:9/14/2023 最后编辑:Achim Zeileis 更新时间:9/18/2023 访问量:102
由于 T1 fontenc 和 latin1 日志文件导致的 tinytex 警告
tinytex warnings due to T1 fontenc and latin1 log file
问:
问题
我在具有 (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 系统上也看到了同样的问题。tinytex
xfun
tinytex
解决方法
我可以通过不使用 T1 字体编码来避免这个问题,即省略或注释 .然后使用 OT1 字体编码,并且有关已满 hbox 的日志消息为 ASCII。tiny.tex
问题
我能做些什么来获取 UTF-8 格式的日志消息吗?还是必须处理它(例如,通过读取字节然后使用 )?tinytex
iconv()
答:
(部分答案基于塞巴斯蒂安·迈耶(Sebastian Meyer)的名单外反馈:)
日志消息实际上不是 latin1 编码的。相反,它包含用于排版的字符的表示形式,文本编辑器和类似工具可以将其解释为拉丁语1。在pdfLaTeX中,这是无法避免的(仅在LuaLaTeX或XeLaTeX中)。
{TeX} 中解释了详细信息:什么控制了 LaTeX 日志文件的编码 - 以及如何更改它? 在恩里科·格雷戈里奥(Enrico Gregorio)的回答和大卫·卡莱尔(David Carlisle)的进一步评论中。在此讨论中,建议将日志文件读取为字节(而不是 UTF-8 编码文件)。
评论
pdflatex tiny.tex
tinytex
tinytex::latexmk("tiny.tex", clean = FALSE)
tinytext
->xfun::read_utf8
tinytex
xfun::read_utf8()
readLines(con, encoding = "UTF-8", warn = FALSE)
validUTF8()