是否可以自动推断具有共同前缀的宏?

是否可以自动推断具有共同前缀的宏?

假设我有以下代码:

\documentclass{article}

\usepackage{xspace}

\def\cal#1{\ensuremath{\mathcal{#1}}\xspace}
\newcommand{\calA}{\cal A}

\begin{document}

Let \calA be a linearly ordered set.

\end{document}

现在,想象一下我需要对单个字母使用大量数学运算,我该如何让 latex 自动推断/自动生成 X 为大写字母的定义\calX。当然,我可以生成 26 个新命令,但我不想这样做。

我的意思是我不想在\cal和之间留空格X。有什么技巧可以做到这一点吗?

答案1

控制序列要么已定义,要么未定义。没有办法说

嘿,TeX,如果你发现一个以 开头的控制序列,后面\cal跟着一个大写字母,比如说X,并且它当前未定义,请将其定义为\mathcal{X}

嗯,可能会有一些非常脆弱有很多方法可以做到这一点。在使用复杂而脆弱的代码和定义所需的宏之间进行权衡,最终选择后者。

使用建议的代码要简单得多自动生成新命令或者代码https://tex.stackexchange.com/a/207992/4427用于批量定义您需要的宏。

关于\ensuremath\xspace,我建议坚持使用$\calA$,这样输入起来不会太困难,而且包含更多的语义。

答案2

\documentclass{article}
\usepackage{listofitems,xspace}
\newcommand\makecalx[1]{%
  \expandafter\def\csname cal#1\endcsname{\ensuremath{\mathcal{#1}}\xspace}%
}
\readlist\callets{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
\foreachitem\z\in\callets[]{\expandafter\makecalx\expandafter{\z}}
\begin{document}
Here is \calG and \calZ.
\end{document}

在此处输入图片描述

相关内容