Write18:LuaTeX 存在编码问题,而 XeLaTeX 没有

Write18:LuaTeX 存在编码问题,而 XeLaTeX 没有

xelatex(使用选项--shell-escape)可以很好地编译此文档:

\documentclass{article}
\usepackage{fontspec}
\begin{document}
LuaTeX is not
\immediate\write18{echo uber | sed y/u/ü/ > inc.tex}
% or: \directlua{os.execute("echo uber | sed y/u/ü/ > inc.tex")}
\input{inc.tex}.
\end{document}

lualatex(带有--shell-escape)返回此错误:

sed: -e expression #1, char 7: strings for `y' command are different lengths

显然 LuaLaTeX 存在编码问题,将“ü”视为两个字符,而 XeLaTeX 则一切正常。有什么解决方法吗?

答案1

LuaTeX 将语言环境设置重置为 C,文档在“3.2 LUA 更改”部分末尾说明:

在现有的 LUA 中,许多事情都取决于当前的语言环境。在 LUATEX 中,我们无法做到这一点,因为这会使文档无法移植。当 LUATEX 运行时,如果强制执行以下语言环境设置:

LC_CTYPE=C
LC_COLLATE=C
LC_NUMERIC=C

然后sed看不到Unicode字符,编码为UTF-8,而是两个字节。

如果sed设置LC_CTYPE=en_US.UTF-8有帮助:

\documentclass{article}
\usepackage{fontspec}
\begin{document}
LuaTeX is not
\immediate\write18{echo uber | env LC_CTYPE=en_US.UTF-8 sed y/u/ü/ > inc.tex}
\input{inc.tex}.
\end{document}

相关内容