![宏处理器在没有花括号的情况下过于努力](https://linux22.com/image/475102/%E5%AE%8F%E5%A4%84%E7%90%86%E5%99%A8%E5%9C%A8%E6%B2%A1%E6%9C%89%E8%8A%B1%E6%8B%AC%E5%8F%B7%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%BF%87%E4%BA%8E%E5%8A%AA%E5%8A%9B.png)
鉴于这个 MWE;
\documentclass[12pt]{report}
\usepackage{fontspec}
\def\ee{\=e\=e}
\begin{document}
sh\ee{n}g ur k\=asn
\end{document}
有没有办法消除花括号,防止宏处理器混淆并寻找另一个宏名?类似于\=a
不消耗以下 s 的方法。我刚刚注意到,\ee
由于我没有足够的 LaTeX-Fu 来纠正,除了用一对闭合括号之外,还会消耗以下空间{}.
答案1
使用 LuaLaTeX 是可以实现的。您可以添加一个回调,对每一行进行后处理,以\ee
将的实例替换为\ee
,即添加一个空格。gsub
是全局替换,因此一行中的所有出现都将被替换。您可以添加其他带有其他gsub
行的宏。
\documentclass[12pt]{report}
\usepackage{luacode}
\def\ee{\=e\=e}
\def\oo{\=o\=o}
\begin{luacode}
function addspace(line)
line = string.gsub(line, "\\ee", "\\ee ")
line = string.gsub(line, "\\oo", "\\oo ")
return line
end
luatexbase.add_to_callback("process_input_buffer", addspace, "easytyping")
\end{luacode}
\begin{document}
sh\eeng ur k\=asn \oong \eeng
\end{document}
但我建议sh\ee ng ur k\=asn \oo ng \ee ng
您自己打字,这样很容易习惯,并且可以省去后期处理的麻烦。