由于我一直在使用矩阵,因此我想创建以下命令:
\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
控制字标记。\2x2
2x2
句法:
\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}