允许使用数字作为计数器名称的一部分的解决方法?

允许使用数字作为计数器名称的一部分的解决方法?

我尝试定义索引计数器,例如 x1、x2、... 等,方法是像这样定义它们:\newcount\x1、\newcount\x2、... 等,但它不起作用。在 TeX 或 LaTeX 中是否有解决方法?我编写了一个小型 tex 文件,说明了尝试此方法时会发生什么。补充说明:@cfr 指出,在 LaTex 中可以使用命令 \newcounter{name},但该问题有一个很好的答案,无法通过搜索引擎轻松找到。(我有一些很好的 TeX 参考书,但没有 LaTeX 参考书。)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  Example tex-file that illustrates what happens  %%
%%  when you use a number in the name of a counter  %%
%%                                                  %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         

\documentclass{article}
\usepackage[paperwidth=0.75in, paperheight=1.5in]{geometry}
\pagestyle{empty}

\begin{document}

\newcount\a  \newcount\b \newcount\c7

\a=1   \b=41 \c7=78

\noindent
a = \number\a  
\par \vskip 5pt \noindent
b = \number\b  
\par \vskip 5pt \noindent 
c7 = \number\c7 

\end{document}

答案1

tex 解析由“catcodes”()控制,\catcode任何字符的 catcode 都是可更改的,但控制序列名称可以是任意数量的 catcode 11 字符(字母)或单个非字母,例如\"o不是\"{o}名为数字的命令"o是非字母,因此您可以拥有\1但不是\a1。可以通过将数字设为 catcode 11 来使其成为字母,但许多事情会中断,因此除非在非常受控的环境中,否则这不是一个好主意。

请注意,此限制仅适用于转义字符后的名称解析(通常\)。

\csname name with 1 and 2\endcsname

访问名称中包含数字和空格的命令name with 1 and 2,您无法通过 访问它\name with 1 and 2。特别是 latex 有一些结构,例如始终通过名称访问的环境,因此\begin{tabular*}内部使用带有名称的宏tabular*,即使可能无法通过 访问\tabular*。LaTeX 计数器虽然采用混合设计,但它们是通过名称分配的,因此您可以去

\newcounter{c7}

但它们是通过命令令牌使用的;特别是上面的命令创建了一个名称thec7扩展为计数器的打印形式的命令,但这不能通过访问,\thec7而只能通过\csname thec7\endcsname,所以最好避免这样的构造,只使用生成合法命令名称的计数器名称(即,仅由字母组成)。

相关内容