将 \choose 重新定义为 \binom

将 \choose 重新定义为 \binom

我不知道我应该使用\binom而不是\choose(我忽略了所有警告)。现在,我不用在所有我使用的地方手动更改它\choose我认为应该有一种方法可以重新定义 \choose对吗\binom

但是,我不知道如何做,也找不到如何去做。

答案1

假设您总是将 的中缀式参数括\choose在花括号中,即,如果您写的${n \choose k}$不仅仅是$n \choose k$,那么以下基于 LuaLaTeX 的方法可能会让您感兴趣。它定义了一个 Lua 函数并将其分配给 LuaTeX 的process_input_buffer回调,以扫描输入流中的 实例{...\choose...}并将它们转换为等效的\binom表达式TeX 开始其常规处理。

这种方法确实有一些局限性。特别是,它假设 的两个...参数\choose不包含进一步的花括号。希望一个约束较少的约束是 的实例{...\choose...}不包含换行符。

在此处输入图片描述

如果你检查日志文件,你会发现它不包含任何此类警告

Package amsmath Warning: Foreign command \atopwithdelims;
(amsmath)                \frac or \genfrac should be used instead
(amsmath)                 on input line 13.

这是因为当 LaTeX 处理输入时,它从未“看到”任何指令\choose

\documentclass{article}
\usepackage{amsmath} % for '\binom' macro
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function choose2binom ( s )
   -- perform non-greedy pattern match for "1 or more instances of any character"
   return ( s:gsub ( "{(..-)\\choose(..-)}" , "\\binom{%1}{%2}" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
    "process_input_buffer", choose2binom , "choose2binom" ) }}

\begin{document}
${5\choose3}$ ${ 10 \choose 4 }$ $ {n\choosek} $
\end{document}

相关内容