我怎样才能告诉 LaTeX \input 文件的编码与 inputenc 不同?

我怎样才能告诉 LaTeX \input 文件的编码与 inputenc 不同?

我目前正在和妻子一起写一份 .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()

相关内容