如何保存变量

如何保存变量

我需要在文档的某些部分更改“hyphenpenalty”,但我不知道之后如何正确恢复以前的值。

例如:

\hyphenpenalty=10000% 
\@starttoc{toc}%
\hyphenpenalty=50 %% revert to default (??)

我认为这不是一个很好的解决方案。我怎样才能将以前的值保存到临时变量中并从中恢复?

答案1

一个简单的解决方案是:

\newcount\temphyphenpenalty
\temphyphenpenalty=\hyphenpenalty
\hyphenpenalty=10000
\@starttoc{toc}%
\hyphenpenalty=\temphyphenpenalty %% revert to default

答案2

无需设置计数器来记住该值:

\begingroup
\hyphenpenalty=10000
\@starttoc{toc}%
\par\endgroup

无需记住或重置旧值,因为 TeX 将\hyphenpenalty在组结束时恢复 的值。我添加了最后一个\par以确保最后一段将设置为 的正确值\hyphenpenalty

如果你不想要该组(在不同情况下可能是必要的),你可以不浪费寄存器:

\mathchardef\savedhyphenpenalty=\hyphenpenalty
\hyphenpenalty=10000
\@starttoc{toc}
\hyphenpenalty=\savedhyphenpenalty

标记\mathchardef可用于 TeX 寻找数字的任何地方。唯一的限制是要保存的数字必须是非负数且小于 32768。但是,通常\hyphenpenalty在这个区间内。

答案3

(La)TeX“变量”可以是宏或寄存器。寄存器可以是计数器(整数)、维度、跳过(带单位的小数)或读/写处理程序等。请注意,您可以在组内更改它们,即{ .. }\begingroup...\endgroup或 LaTeX 环境,然后它们的旧值会在组结束时自动恢复。

像 这样的整数设置\hyphenpenalty基本上是特殊count寄存器。你可以将它们的当前值复制到任何其他count寄存器中,然后使用 将其复制回来\somecount=\someothercount,其中=是可选的。(请注意count是 TeX 类型,LaTeX 计数器基于它们)

LaTeX 提供了两个临时count寄存器,分别称为\@tempcnta\@tempcntb。通常,最好只在本地组中更改它们,但如果您可以添加一个,则无论如何都不需要临时存储该值。您使用的其他一些代码可能会更改此类通用临时寄存器,因此有时可能需要使用 来使用自己的count寄存器\newcount\yourtempcount

% In the preamble, only once:
\newcount\yourtempcount

% Save and restore:
\yourtempcount=\hyphenpenalty
\hyphenpenalty=10000
\@starttoc{toc}%
\hyphenpenalty=yourtempcount

也可以不做临时登记通过将恢复代码放入(通常是临时的).此处使用以下内容扩展当前值\the

% Save and restore:
\edef\myrestorecode{\hyphenpenalty=\the\hyphenpenalty\relax}
\hyphenpenalty=10000% 
\@starttoc{toc}%
\myrestorecode

这将 定义\myrestorecode\hyphenpenalty=<current value, e.g. "50">\relax,因为\hyphenpenalty它本身是不可扩展的。\relax将作为数字的结束标记添加。\space也可以找到单个空格 ( )。 这样做的好处是您不需要寄存器(需要先声明),并且这也适用于多个值:

\edef\myrestorecode{%
     \hyphenpenalty=\the\hyphenpenalty\relax
     \someothercountordim=\the\someothercountordim\relax
     % ...
}

它适用count于维度/跳过寄存器。

相关内容