问题已写在上面。
答案1
TeX 符号与 LaTeX 符号。
\newdimen\myDim \myDim=5cm+\linewidth
不起作用
\newdimen\myDim \myDim=\dimexpr5cm+\linewidth\relax
适用于etex
\newlength\myLen \setlength\myLen{5cm+\linewidth}
与包一起使用calc
\newlength\myLen \setlength\myLen{\dimexpr5cm+\linewidth}
适用于etex
myDim=5cm plus 1em
不起作用,必须跳过\newskip\mySkip
\setlength\myLen{5cm plus 1em minus .2ex}
有效,LaTeX 长度始终是跳过寄存器
答案2
详细阐述一下 Herbert 的说法,LaTeX 的“长度”就是 TeX 所称的“跳过”:带有橡胶成分的长度。因此,可以使用 TeX 语法设置它们
\fboxsep=1 cm
或 LaTeX 语法
\setlength{\fboxsep}{1 cm}
这里有几个需要注意的地方。首先,LaTeX 会插入一个,\relax
以防止代码意外拾取“加号”或“减号”部分。例如
\def\Oops#1{\fboxsep=#1}
\Oops{1 cm} plus some space
会导致 TeX 抱怨缺少数字,因为“加号”被解释为跳过的拉伸组件。插入 的 LaTeX 解决方案\relax
是安全的。当然,可以在没有 LaTeX 的情况下在 TeX 宏中执行相同的操作:
\def\Safe#1{\fboxsep=#1\relax}
\Safe{1 cm} plus some space
此处的‘加号’并未被误解。
Herbert 还指出,该calc
软件包允许将计算作为长度设置的一部分。就我个人而言,我倾向于使用 e-TeX 来实现这一点:
\def\Safer#1{\fboxsep\glueexpr#1\relax}
在此,计算由引擎完成,这通常比使用宏更好。(但请注意,仅使用、、、和进行基本\glueexpr
算术运算。该包具有“max”和“min”函数。)(
)
+
-
x
/
calc