请考虑以下示例:
\documentclass[11pt,a4paper]{book}
\usepackage{lipsum}
\usepackage{titlesec}
\newlength{\textsize}
\makeatletter
\setlength{\textsize}{\f@size pt}
\makeatother
\titlespacing*{\section} {0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex} % WORK
\titlespacing*{\section} {0pt}{\dimexpr(3.5ex-1.\textsize)\relax plus 1ex minus .2ex}{2.3ex plus .2ex} % FAIL
\begin{document}
\section{Section}
\lipsum
\end{document}
错误如下:
如何使失败的表达式起作用以便减少文本大小的空间?
答案1
该\titlespacing
命令使用一些技巧来提取plus
和minus
维度并进行一些计算;\relax
标记会干扰处理,因为\relax
它被用作内部宏之一中参数的终止符。
\documentclass[11pt,a4paper]{book}
\usepackage{lipsum}
\usepackage{titlesec}
\newlength{\textsize}
\makeatletter
\setlength{\textsize}{\f@size pt}
\makeatother
\titlespacing*{\section}
{0pt}
{\glueexpr (3.5ex-\textsize) + 0pt plus 1ex minus .2ex}
{2.3ex plus .2ex}
\begin{document}
\section{Section}
\lipsum
\end{document}
或者,使用
\the\dimexpr 3.5ex-\textsize\relax plus 1ex minus .2ex
这将\relax
在评估时删除不需要的部分\dimexpr
。