快速定义多个简写

快速定义多个简写

我看到的大多数冗长的序言都有几十行这样的内容

\newcommand{\Acal}{\mathcal{A}}
\newcommand{\Bcal}{\mathcal{B}}
%...
\newcommand{\Gcal}{\mathcal{G}}

虽然我可以轻松编写一个宏来循环遍历列表并定义相应的控制序列,但这并不美观。例如,

\def\letterdef#1#2#3{\def\letterdef@##1{\expandafter\def\csname #1\endcsname{#2}}%
  \letterdef@@#3{?\@car{}}\@nil}
\def\letterdef@@#1{\@gobble#1\letterdef@{#1}\letterdef@@}

用作\letterdef{#1cal}{\mathcal{#1}}{ABCDEFG}。将其放在序言中会使其看起来不好看。是否已经有提供此类功能的软件包?

答案1

来自\docsvlistetoolbox可以使这变得更容易:

\def\do#1{\@namedef{#1cal}{\ensuremath{\mathcal{#1}}}

\docsvlist{A,B,C,D,E,F,G}

(或者,也有\forcsvlist使用内联处理程序而不是预定义\do宏的命令。)

但是,正如我在上面的评论中所说,我反对这种非语义的快捷方式。虽然这\Acal当然是更短比 更\mathcal{A}干净。我更喜欢使用语义快捷方式,例如定义\bigO\mathcal{O}Landau 符号)或\laplace定义\mathcal{L}

相关内容