使长度为负数

使长度为负数

我想知道是否有办法让\negate命令将长度变为负数。因此,您可以执行以下操作:

\newlength{\negativeabovecaptionskip}
\setlength\negativeabovecaptionskip{\negate{\abovecaptionskip}}

\the\abovecaptionskip %prints: 10pt
\the\negativeabovecaptionskip %prints: -10pt

%%But also:
\newlength{\negativeparskip}
\setlength\negativeparskip{\negate{\parskip}}

\the\parskip %prints: 15pt plus 2pt minus 1pt
\the\negativeparskip %prints: -15pt plus 1pt minus 2pt
%(notice that the the plus/minus values switched possitions)

有任何想法吗?

答案1

我确实觉得你的第二个要求有点奇怪。为什么拉伸和收缩部分应该交换?你不是在寻找正常的减号吗?

\documentclass[parskip]{scrartcl}
\begin{document}
\newlength{\negativeabovecaptionskip}
\setlength\negativeabovecaptionskip{-\abovecaptionskip}

\the\abovecaptionskip %prints: 10pt

\the\negativeabovecaptionskip %prints: -10pt

%%But also:
\newlength{\negativeparskip}
\setlength\negativeparskip{-\parskip}

\the\parskip %prints: 15pt plus 2pt minus 1pt

\the\negativeparskip %prints: -15pt plus 1pt minus 2pt

\end{document}

答案2

使用 e-TeX,你可以做类似的事情

\documentclass{article}
\newcommand*\negate[1]{%
  -\dimexpr#1 plus\glueshrink #1 minus \gluestretch #1
}
\begin{document}
\newlength{\negativeabovecaptionskip}
\setlength\negativeabovecaptionskip{\negate{\abovecaptionskip}}

\the\abovecaptionskip %prints: 10pt

\the\negativeabovecaptionskip %prints: -10pt

%%But also:
\parskip 15pt plus 2pt minus 1pt

\newlength{\negativeparskip}
\setlength\negativeparskip{\negate{\parskip}}

\the\parskip %prints: 15pt plus 2pt minus 1pt

\the\negativeparskip %prints: -15pt plus 1pt minus 2pt
%(notice that the the plus/minus values switched positions)
\end{document}

利用\dimexpr将跳过变成维度的事实,我们可以提取拉伸和收缩组件。

答案3

乌尔里克观察到,调换plusminus部分几乎没有意义。如果你不坚持这一点,

\newcommand*{\negate}[1]{\glueexpr -2\glueexpr#1\relax+#1\relax}

将粘合参数乘以一个因子将会消除拉伸和收缩成分(并且\gluexpr表现得像粘合参数)。

请注意,在粘合参数前面添加一个简单的减号会改变每个组件的符号,而不会消除拉伸和收缩组件,这与前面添加相反-1

相关内容