长度加上减去其他长度?

长度加上减去其他长度?

请考虑以下示例:

\newlength{\textsize}
\makeatletter
\setlength{\textsize}{\f@size pt}
\makeatother

\setlength{\parskip}{12pt plus 1pt} % WORKS
\setlength{\parskip}{\textsize plus 1pt} % FAIL

如何使故障的线路恢复工作?

这意味着:如何将长度设置为另一个长度加上和/或减去其他值?

答案1

\newlength{\textsize}
\makeatletter
\setlength{\textsize}{\f@size pt}
\makeatother

\setlength{\parskip}{12pt plus 1pt} % WORKS
\setlength{\parskip}{1\textsize plus 1pt} % FAIL

\showthe\parskip

LaTeX 长度是跳过寄存器,因此\textsize是完整的粘合规范,不能采用其他plus组件。1\textwidth将其强制转换为维度,丢弃任何正负组件,以便您可以添加新的正组件。

答案2

David 的两种替代方案回答

  • e-TeX 提供了\glueexpr,允许添加粘合规范:

    \newlength{\textsize}
    \makeatletter
    \setlength{\textsize}{\f@size pt}
    \makeatother
    
    \setlength{\parskip}{\glueexpr\textsize + 0pt plus 1pt\relax}
    
  • 如果\textsize不打算使用拉伸或收缩组件,则可以使用 dimen 而不是跳跃寄存器。LaTeX\newlength会分配一个跳跃寄存器,\newdimen即 dimen 寄存器:

    \newdimen{\textsize}
    \makeatletter
    \setlength{\textsize}{\f@size pt}
    \makeatother
    
    \setlength{\parskip}{\textsize plus 1pt}
    

相关内容