我尝试定义索引计数器,例如 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
,所以最好避免这样的构造,只使用生成合法命令名称的计数器名称(即,仅由字母组成)。