数字作为命令的参数

数字作为命令的参数

我定义如下:

\newcounter{testCounter}
\newcommand{\testCommand}[1]{
                             \setcounter{testCounter}{#1}
                             Your number is \ref{testCounter}!
                             }

现在我想在文档中调用这个命令:

\begin{document}
\testCommand{12}
\end{document}

我希望这能给我带来:

你的号码是12!

但是,我得到了错误,

“存在未定义的引用。”

有人能向我解释为什么这不起作用吗?这似乎很简单...我也在使用以下软件包:

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{marvosym}
\usepackage{lmodern}
\usepackage{parskip}
\usepackage{pifont}
\usepackage{calc}
\usepackage{nameref}

谢谢!

答案1

您想打印存储在计数器中的数字:使用\thetestCounter\arabic{testCounter}

任何用 定义的计数器\newcounter都会获得一个关联的宏\theX,该宏默认为\arabic{X},即\newcounter{foo}定义\thefoo,用阿拉伯数字打印计数器值。

如果要使用参考,则需要另一种方法,请参阅\otherCommand,其中将计数器设置为减一的值,然后\refstepcounter应用,立即使用\label来“冻结”计数器参考值。

这被写入.aux文件并可以在第二次运行中加载并从一开始就引用!

\documentclass{article}


\newcommand{\myconstant}{4}

\newcounter{testCounter}
\newcommand{\testCommand}[1]{%
  \setcounter{testCounter}{#1}%
  Your number is: \thetestCounter%
}

\newcommand{\otherCommand}[1]{%
  %Does not need calc package
  \setcounter{testCounter}{\numexpr#1-1}%
  \refstepcounter{testCounter}%
}

\begin{document}
Later on, you will set the counter to \ref{somelabel}

\testCommand{12}

\testCommand{\numexpr12*\myconstant}

\otherCommand{1001}\label{somelabel} 


\end{document}

在此处输入图片描述

答案2

\references 与\labels 一起工作,因此为了使用任何\ref,您必须在某处有一个伴随\label。此外,\label只抓取特定类型的可引用对象(是的,主要是计数器,但那些已经“以特定方式调整”的对象;见了解引用和标签的工作原理)。

在您的示例中,使用更简单

\newcommand{\testCommand}[1]{%
  Your number is #1!%
}

不带\ref。如果你想对数字进行计算,你可以使用一个包。也许像

在此处输入图片描述

\documentclass{article}

\usepackage{xfp}

\newcommand{\testCommand}[1]{%
  Your number is \fpeval{#1}!%
}

\begin{document}

\testCommand{12}

\testCommand{12 * 3}

\testCommand{12 / 4}

\end{document}

相关内容