如何让命令更加通用?

如何让命令更加通用?

因此命令如下:

\newcommand{\betahat}{\hat{\beta}}

我怎样才能让 beta 可以被任何内容替换。这样我就可以输入\yhat然后获取\hat{y}或任何我可能想要添加的内容。我只是觉得这样做更快更有效率。这是否可行,而无需为每种可能的情况设置大量不同的命令?

如果有关系的话,我正在使用的编辑器是 TexMaker。

答案1

这是一个基于 LuaLaTeX 的解决方案。

假设输入的形式为\<x>hat。解决方案依赖于以下关于 的工作假设<x>

  • 如果<x>由一个单身的字母字符,例如\ahat\zhat,则输入将转换为\hat{<x>},例如\hat{a}\hat{z}

  • 如果<x>两个或以上字母字符,例如\alphahat\Omegahat,则输入将转换为\hat{\<x>},例如\hat{\alpha}\hat{\Omega}。换句话说,假设<x>是一个缺少反斜杠前缀的宏。

    \xyhat这一工作假设的一个直接结果是,不是被转换为\hat{xy}。相反,它将被转换为\hat{\xy}-- 可能会导致崩溃,除非恰好被定义为有效宏。我相信这不是一个很大的限制,因为一开始就考虑在-- 或任何其他多字母组合上方放置一个窄重音符号\xy并没有多大意义。^xy

  • 如果<x>为空或不完全由字母组成,则不执行任何操作。因此,\hat{a}\hat{\alpha}不会被修改。如果您的 LaTeX 文件恰好包含\,hat,那么它也不会被修改:TeX 将只输出一个细空格 ( \,),后跟字母hat

解决方案由一个 Lua 函数(称为myhat)组成,它负责完成所有工作。此函数被分配给回调process_input_buffer,赋予其预处理器角色:该函数的工作在非常早期的阶段完成,TeX 会进行任何常规处理。因此,TeX 永远不会“看到”\ahat\alphahat;它只会看到\hat{a}\hat{\alpha}

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function myhat ( s ) -- this function does all of the work
   s = s:gsub ( "\\(%a)hat"   , "\\hat{%1}" )
   s = s:gsub ( "\\(%a%a-)hat", "\\hat{\\%1}" )
   return s
end
\end{luacode}   
% Assign 'myhat' to the 'process_input_buffer' callback:
\directlua{luatexbase.add_to_callback("process_input_buffer", myhat, "myhat")}
   
\begin{document}
$\alphahat, \betahat, \dots, \psihat, \omegahat$;
$\Gammahat, \Deltahat, \dots, \Psihat, \Omegahat$; 
$\ahat, \bhat, \dots, \zhat$;
$\Ahat, \Bhat, \dots, \Zhat$.

% Verify that output is the same if standard syntax is used:
$\hat{\alpha}, \hat{\beta}, \dots, \hat{\psi}, \hat{\omega}$;
$\hat{\Gamma}, \hat{\Delta}, \dots, \hat{\Psi}, \hat{\Omega}$; 
$\hat{a}, \hat{b}, \dots, \hat{z}$;
$\hat{A}, \hat{B}, \dots, \hat{Z}$.
\end{document}

相关内容