有没有办法更新根据其他长度计算出的长度?

有没有办法更新根据其他长度计算出的长度?

如果我使用其他长度来定义长度,有没有办法稍后更新该长度而无需再次给出定义?

假设我定义几个长度如下

\newlength{\Test}\setlength{\Test}{20pt}
\newlength{\Tist}\setlength{\Tist}{30pt}
\newlength{\Tost}\setlength{\Tost}{\dimexpr \Test + \Tist}

\the\Test\ +
\the\Tist\ =
\the\Tost

这将产生

20.0pt + 30.0pt = 50.0pt

如果我稍后重新定义计算中使用的长度之一,例如,

\setlength{\Test}{40pt}

有没有办法“更新”相关长度而不明确给出计算公式?目前它不会更新:

\the\Test\ +
\the\Tist\ =
\the\Tost

现在会产生

40.0pt + 30.0pt = 50.0pt

答案1

如果定义\Tost为宏,它将在使用时扩展,因此结果将始终使用\Test和的当前值\Tist

\documentclass{article}
\newlength{\Test}\setlength{\Test}{20pt}
\newlength{\Tist}\setlength{\Tist}{30pt}
\newcommand*{\Tost}{\dimexpr \Test + \Tist\relax}

\begin{document}
\the\Test\ +
\the\Tist\ =
\the\Tost

\setlength{\Test}{40pt}

\the\Test\ +
\the\Tist\ =
\the\Tost

\end{document}

将导致:

在此处输入图片描述

答案2

你可以做这样的事情:

\documentclass{article}
\newlength{\Test}\setlength{\Test}{20pt}
\newlength{\Tist}\setlength{\Tist}{30pt}
\newlength{\Tost}\setlength{\Tost}{\dimexpr \Test + \Tist}

\newcommand{\updatelength}[2]{%
\setlength{#1}{#2}%
\setlength{\Tost}{\dimexpr \Test + \Tist}%
}

\begin{document}
\the\Test\ +
\the\Tist\ =
\the\Tost

\updatelength{\Test}{40pt}

\the\Test\ +
\the\Tist\ =
\the\Tost
\end{document}

答案3

我认为你需要一个宏而不是一个长度。setlength命令运行一次并给出值。宏可以随时调用并再次计算。因此,你可以将计算放在宏中:

\documentclass{article}
\newlength{\Test}\setlength{\Test}{20pt}
\newlength{\Tist}\setlength{\Tist}{30pt}
\newlength{\Tost}
\def\recalc{
\setlength{\Tost}{\dimexpr \Test + \Tist}
}


\begin{document}
\recalc

\the\Test\ +
\the\Tist\ =
\the\Tost

\setlength{\Test}{40pt}
\recalc

\the\Test\ +
\the\Tist\ =
\the\Tost

\end{document}

输出:

在此处输入图片描述

相关内容