我想知道是否有办法让\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
乌尔里克观察到,调换plus
和minus
部分几乎没有意义。如果你不坚持这一点,
\newcommand*{\negate}[1]{\glueexpr -2\glueexpr#1\relax+#1\relax}
将粘合参数乘以一个因子将会消除拉伸和收缩成分(并且\gluexpr
表现得像粘合参数)。
请注意,在粘合参数前面添加一个简单的减号会改变每个组件的符号,而不会消除拉伸和收缩组件,这与前面添加相反-1
。