![我可以让 LuaLaTeX 使用 ANSI 编码的 \input 文件吗?](https://linux22.com/image/263621/%E6%88%91%E5%8F%AF%E4%BB%A5%E8%AE%A9%20LuaLaTeX%20%E4%BD%BF%E7%94%A8%20ANSI%20%E7%BC%96%E7%A0%81%E7%9A%84%20%5Cinput%20%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F.png)
我将\input
自动生成的文件(由 Stata 生成的表格)包含到主文档中。我想使用 LuaLaTeX 编译该文档。不幸的是,生成的文件是 ANSI 编码的(Stata 不支持 unicode)。因此 LuaLaTeX"String contains an invalid utf-8 sequence"
向我抛出了一个错误。目前,问题只有一个字符,即 ¤(根据 Windows 字符映射为 U00A4)。无论是否使用 XeLaTeX,文档都可以正常编译。
我宁愿不搜索和替换字符(例如使用 \textcurrency,尽管在数学模式下也能正常工作),因为它涉及许多经常更改的包含文件。出于同样的原因,我宁愿不手动转换包含文件的编码。我还希望有一个更强大的解决方案,即不仅适用于单个字符。
那么有没有办法让 LuaLaTeX 使用包含 ANSI 编码的文件,类似于使用 \inputencoding 与 pdflatex?
或者,是否可以在编译时自动搜索和替换?
以下是 MWE:
\documentclass{article}
\usepackage{luatextra, luaotfload}
\usepackage[vargreek-shape=unicode]{unicode-math} %
\defaultfontfeatures{Renderer=Basic,Scale=MatchLowercase, Ligatures={TeX}}
\setmainfont{Cambria}
\setmathfont{Cambria Math}
\begin{document}
A currency symbol in the main document: ¤
\input{input.tex}
\end{document}
input.tex 只有一行,但是是 ANSI 编码的。
A currency symbol in the included document: ¤
答案1
要告诉 LuaTeX 接受 UTF8 以外的其他编码,您需要一个附加包。类似于inputenc
LaTeX 的 为luainputenc
LuaTeX 提供了必要的命令。基本语法就是\usepackage[<encoding>]{luainputenc}
。其中最常用的编码是 latin1 和 cp1252。稍作修改的示例编译时没有错误:
\documentclass{article}
\usepackage[latin1]{luainputenc}
\usepackage{luatextra, luaotfload}
\usepackage[vargreek-shape=unicode]{unicode-math} %
\defaultfontfeatures{Renderer=Basic,Scale=MatchLowercase, Ligatures={TeX}}
\setmainfont{Cambria}
\setmathfont{Cambria Math}
\begin{document}
A currency symbol in the main document: ¤
\input{input.tex}
\end{document}
或者你也可以使用以下工具图标自动转换文件。