我正在尝试编写简单的宏,其功能是打印字母表中的每一个 n = n + 第 k 个字母,其中 k 和 n 是计数器。所以我需要一个\loop
-\repeat
构造。我使用了它,但不幸的是它工作不正确。
主要错误是“缺少数字,视为零”,在\repeat
写入命令的行中。我也尝试过不使用该\value{n}
函数 - 结果相同。
有什么想法可以修复它以使其正常工作吗?
这是我的代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{amsmath}
\begin{document}
\newcounter{n}
\newcounter{k}
\setcounter{k}{1}
\setcounter{n}{0}
\loop
\alph{ \value{n} }
\addtocounter{n}{k}
\ifnum \value{n} < 26 \repeat
\end{document}
答案1
您\value
在错误的地方使用了它。您需要在的第二个参数中使用它,\addtocounter
而不是在中使用它\alph
。(我注释掉了与问题不直接相关的包。)
\documentclass{article}
% \usepackage[utf8]{inputenc}
% \usepackage[english, russian]{babel}
% \usepackage{amsmath}
\begin{document}
\newcounter{n}
\newcounter{k}
\setcounter{k}{1}
\setcounter{n}{0}
\loop
\alph{n}
\addtocounter{n}{\number\value{k}}
\ifnum \value{n} < 26 \repeat
Or without spurious spaces:
\setcounter{n}{0}%
\loop%
\alph{n}%
\addtocounter{n}{\number\value{k}}%
\ifnum\value{n}<26\repeat
\end{document}
答案2
该命令\alph
以 a 作为参数柜台名称,所以\alph{\value{n}}
是不正确的,应该是\alph{n}
。
该命令\addtocounter
接受两个参数;第一个参数是 LaTeX 应该作用的计数器的名称,第二个参数应该是一个整数(任何可能的表示);如果你想将计数器增加n
31,你可以这样做
\addtocounter{n}{31}
\addtocounter{n}{"1F} % hexadecimal
\addtocounter{n}{'37} % octal
\addtocounter{n}{\value{mycounter}}
providedmycounter
当前存储 31。第二个参数不能仅包含计数器的名称。
因此,您有两个错误调用:(\alph{\value{n}}
注意空格)应该是\alph{n}
,而\addtocounter{n}{k}
应该是\addtocounter{n}{\value{k}}
。
您还会遇到虚假空格和错误顺序的情况(您不会得到z
):
\setcounter{k}{1}
\setcounter{n}{0}
\loop
\ifnum\value{n} < 26
\addtocounter{n}{\value{k}}% <--- needed
\alph{n}% <--- needed
\repeat