创建一个带有数字的命令

创建一个带有数字的命令

由于我一直在使用矩阵,因此我想创建以下命令:

\newcommand{\2x2}{2 \times 2}

例如,我可以这样写:

A \in \mathbb{K}^{\2x2},...等等。

我发现 Tex 不允许在创建命令时使用数字。

有办法吗?也许用\usepackage或用新命令?

答案1

您可以使用\csdef\csuse

\documentclass{article}
\usepackage{etoolbox,amssymb}
\csdef{2x2}{2 \times 2}
\begin{document}
Let $A \in \mathbb{K}^{\csuse{2x2}}$, ..

\end{document}

答案2

因为在正常的类别代码制度下,你不能通过\2x2让 TeX 读取和标记 .tex-input 来直接获得控制字标记,而且正确调用\csname..\endcsname与的组合\expandafter有时看起来很麻烦,我提供了一个宏来创建,例如,来自字符标记序列的\CsNameToCsToken控制字标记。\2x22x2

句法:

\CsNameToCsToken⟨stuff not in braces⟩{⟨NameOfCs⟩}

⟨stuff not in braces⟩\NameOfCs

⟨stuff not in braces⟩可能为空。)

(由于\romannumeral-扩展,结果是通过触发两个扩展步骤获得的,例如,通过用 进行两次“命中” \expandafter。)

使用这样的宏,您就不会受到特定定义命令的约束:

\CsNameToCsToken{foo}\foo  。

\CsNameToCsToken\newcommand{foo}\newcommand\foo  。

\CsNameToCsToken\DeclareRobustCommand{foo}\DeclareRobustCommand\foo  。

\CsNameToCsToken\global\long\outer\def{foo}\global\long\outer\def\foo  。

\CsNameToCsToken\expandafter{foo}\bar\expandafter\foo\bar  。

\CsNameToCsToken\let{foo}=\bar\let\foo=\bar  。

\CsNameToCsToken\CsNameToCsToken\let{foo}={bar}\CsNameToCsToken\let\foo={bar}\let\foo=\bar  。

\CsNameToCsToken\string{foo}\string\foo  。

\CsNameToCsToken\meaning{foo}\meaning\foo  。

\CsNameToCsToken\NewDocumentCommand{foo}...\NewDocumentCommand\foo...  。

\makeatletter
%%===============================================================================
%% End \romannumeral-driven expansion safely:
%%===============================================================================
\@ifdefinable\UD@stopromannumeral{\chardef\UD@stopromannumeral=`\^^00}%
%%===============================================================================
%% Obtain control sequence token from name of control sequence token:
%%===============================================================================
%% \CsNameToCsToken<stuff not in braces>{NameOfCs}
%% ->  <stuff not in braces>\NameOfCs
%% (<stuff not in braces> may be empty.)
\@ifdefinable\CsNameToCsToken{%
  \long\def\CsNameToCsToken#1#{\romannumeral\InnerCsNameToCsToken{#1}}%
}%
\newcommand\InnerCsNameToCsToken[2]{%
  \expandafter\UD@exchange\expandafter{\csname#2\endcsname}{\UD@stopromannumeral#1}%
}%
\newcommand\UD@exchange[2]{#2#1}%
\makeatother

\documentclass{article}
\usepackage{amsmath, amssymb}

\CsNameToCsToken\newcommand*{2x2}{2 \times 2}

\begin{document}

Let $A \in \mathbb{K}^{\CsNameToCsToken{2x2}}$, \dots

\end{document}

在此处输入图片描述

相关内容