\setcounter{numofgaps}{\numexpr\number\value{numofboxes}-1}
\setlength{\truetextsectionwidth}{\textsectionwidth-\number\value{numofgaps}\gapwidth}
上面的代码是答案的一个片段 如何在一个投影仪框架中排列文本和图像?。
- 我知道该
\numexpr...\relax
对用于表达式求值。上面的\setcounter
命令没有(代码中\relax
后面的括号结尾有同样的效果吗?)-1
{\numexpr\number\value{numofboxes}-1}
- 该命令的用途是什么
\number
(如果我不使用它,会出现什么问题?) \number\value{numofgaps}\gapwidth
意味着 numofgaps 乘以 gapwidth,但是为什么不添加表示和*
之间的乘积的符号。\value{numofgaps}
\gapwidth
答案1
\number
在这些上下文中不需要原语。但是您需要在\dimexpr
中\setlength
,除非您加载calc
。
例子:
\documentclass{article}
\newcounter{numofboxes}
\newcounter{numofgaps}
\newlength{\textsectionwidth}
\newlength{\truetextsectionwidth}
\newlength{\gapwidth}
\setlength{\gapwidth}{10pt} % an easy number
\setlength{\textsectionwidth}{300pt} % an easy number
\setcounter{numofboxes}{11} % an easy number
\begin{document}
\setcounter{numofgaps}{\numexpr\value{numofboxes}-1}
\setlength{\truetextsectionwidth}{\dimexpr\textsectionwidth-\value{numofgaps}\gapwidth}
\texttt{numofgaps = \thenumofgaps}
\texttt{\string\truetextsectionwidth = \the\truetextsectionwidth}
\end{document}
里面\numexpr
任何<number>
都可以使用,并且\value{numofboxes}
符合的语法<number>
。
长度寄存器可以乘以一个<factor>
基本上是<number>
或一个明确的十进制数。
请注意,里面\dimexpr
有类似
\number\value{numofgaps}*\gapwidth
是不合法的,因为整数乘数必须后长度寄存器;\gapwidth*\number\value{numofgaps}
是合法的,但实际上并不是需要的。
代码\value{counter}
扩展为\csname c@counter\endcsname
,因此它等同于\c@counter
,其中是处理\c@counter
时分配的整数寄存器的名称。在 中,任何整数寄存器名称都可以直接使用。无需通过 将其转换为显式数字。该构造有其用途,但当 TeX 需要 时不需要。\newcounter{counter}
\numexpr
\number
\number\value{counter}
<number>