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}