我目前正在和妻子一起写一份 .tex 报告。她用的是 Windows 机器,我这边用的是 Linux;我们决定用 ISO-8859-1 编码我们的报告(即我们\usepackage[latin1]{inputenc}
在前言部分使用)。
我们还使用 R 和一些其他自定义函数生成大量表格xtable()
以输出 LaTeX。每当我提取 R 输出时,我都会使用以下命令:sink(file("filename.tex", encoding = "ISO-8856-9"))
。但是,有一个包含大量特殊字符的长表。每当我尝试将此表提取为 ISO 时,我都会收到以下消息:
Warning message:
invalid char string in output conversion
尽管这只是一个警告,但它会阻止我们的 LaTeX 编译器正确解析命令\input{filename.tex}
。
我们对此的解决方法是encoding = "UTF-8"
在 R 中使用,然后在文本编辑器中打开文件并使用 ISO 编码保存。然后 LaTeX 会使用所有特殊字符正确编译文件。
是否有命令可以让我告诉 LaTeX 我输入的文件与主 LaTeX 文件的编码不同?在我看来,它看起来应该像这样\input[utf8]{filename.tex}
(但不幸的是\input
,它的同伴\include
不接受选项)。
答案1
您确定编码应该是 ISO-8856-9 吗?我从未听说过这个。也许您指的是 ISO-8859-6(阿拉伯语)或 ISO-8859-9(土耳其语)?
假设你指的是 ISO-8859-9。那么你只需写
\usepackage[latin1]{inputenc}
在代码的开头,
\inputencoding{latin5}
就在你包含文件之前
\inputencoding{latin1}
恢复原始编码。
编辑:
UTF-8 可能会引起一些问题。我会通过声明整个文档应为 UTF-8 然后再切换回来来解决它。以下是一个例子:
以下文件是“main-file.tex”,应使用拉丁语 1 保存。
\documentclass{article}
\usepackage[utf8]{inputenc}
\inputencoding{latin1}
\usepackage[russian,brazil]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\section{First section}
Nunca vi socó coçar sem bico, nunca vi sem bico socó coçar. Um socó, dois socós, três socós, quatro socós, quantos socós pra um só socó coçar.
\inputencoding{utf8}
\selectlanguage{russian}
\input{external-file}
\inputencoding{latin1}
\selectlanguage{brazil}
\section{Third section}
A sábia não sabia que o sábio sabia que o sabiá sabia que o sábio não sabia que o sabiá não sabia que a sábia não sabia que o sabiá sabia assobiar.
\end{document}
还创建文件“external-file.tex”,并以UTF-8保存:
\section{Second section}
Карл у Клары украл кораллы, а Клара у Карла украла кларнет.
对我来说,这个方法没有任何警告。如果你仍然无法让它工作,请告诉我具体的警告和错误。
答案2
如果唯一的问题实际上是对的调用所产生的警告消息sink(file())
,您可以使用suppressWarnings()
来告诉 R 您不想听到来自该特定代码的任何抱怨。
如果没有您正在处理的文件,我无法准确重现您的问题,因此这里有一个使用另一个warning
- 生成调用的示例。以下是您可以如何抑制尝试将字符串“A”转换为数字向量时产生的警告:
sink(file("otherEgFile.txt", encoding = "ISO-8856-9"))
suppressWarnings(as.numeric("A"))
sink()