宏处理器在没有花括号的情况下过于努力

宏处理器在没有花括号的情况下过于努力

鉴于这个 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您自己打字,这样很容易习惯,并且可以省去后期处理的麻烦。

相关内容