这就是我想做的事情:
\documentclass{article}
\usepackage{setspace}
\begin{document}
\begin{center}
\setstretch{1.2}
\begin{center}
\setstretch{0.9} // here I need it to become 0.9 * 1.2
\end{center}
\end{center}
\end{document}
答案1
您可以使用浮点计算工具定义一个\setrelativestretch
命令。xfp
诀窍在于当前因子存储在中\baselinestretch
,但我们需要确保在调用之前对其进行扩展\setstretch
。
在例子中,我夸大了一些因素,只是为了使结果更加明显。
内部之后,\end{center}
拉伸因子将自动恢复为其先前的值。
\documentclass{article}
\usepackage{setspace}
\usepackage{xfp}
\usepackage{lipsum} % for mock text
\newcommand{\setrelativestretch}[1]{%
\begingroup\edef\x{\endgroup
\noexpand\setstretch{\fpeval{(#1)*(\baselinestretch)}}%
}\x
}
\begin{document}
\begin{center}
\setstretch{1.5}
\lipsum[3][1-5]
\begin{center}
\setrelativestretch{0.7}
\lipsum[4][1-5]
\end{center}
\lipsum[5][1-5]
\end{center}
\end{document}
从概念上讲,使用以下特征的更好的解决方案expl3
:
\documentclass{article}
\usepackage{setspace}
\usepackage{xparse}
\usepackage{lipsum} % for mock text
\ExplSyntaxOn
\cs_new_eq:NN \yegor_setstretch:n \setstretch
\cs_generate_variant:Nn \yegor_setstretch:n { e }
\NewDocumentCommand{\setrelativestretch}{m}
{
\yegor_setstretch:e { \fp_eval:n {(#1)*(\baselinestretch)} }
}
\ExplSyntaxOff
\begin{document}
\begin{center}
\setstretch{1.5}
\lipsum[3][1-5]
\begin{center}
\setrelativestretch{0.7}
\lipsum[4][1-5]
\end{center}
\lipsum[5][1-5]
\end{center}
\end{document}
我为它定义了一个别名,\setstretch
因此我也可以为它定义一个首先扩展其参数的变体。