简洁的问题:
\label
有什么办法可以限制 a的可见范围吗\ref
?
动机:
我当前的目标是创建一个相当大的文档,其中包含许多练习及其相关的证明/解决方案。
- 我希望能够参考我在当前证明之前完成的任何证明。(即,如果我已经证明了它,我希望能够使用它!)
- 我希望能够积累观察结果在证明的背景下并在该证明的后面引用它们。但是,这些观察(或假设、介绍等)不需要在该证明之外可见。
例如,在下面的结构化推导示例图中,我希望能够将假设 #5 标记为类似\label{x_is_nonneg}
。但如果我这样做没有任何特殊软件包或 TeX-hackery,我无法使用“ x_is_nonneg
”作为文档其余部分任何其他对象的标签,对吗?这太糟糕了,因为我经常想做出非常特定于上下文的断言,如果我不必将它们命名为 之类的名字,那就太好了\label{exer:8:asmp:5}
。
答案1
解决方案:定义两个宏,自动为标签和引用添加本地前缀。
%%%%%%% in your preamble %%%%%%%%
% macro to define a local label
\newcommand\locallabel[1]{\label{\currentprefix:#1}}
% macro to use a local reference
\newcommand\localref[1]{\ref{\currentprefix:#1}}
%%%%%% in your document %%%%%%
% define a current prefix whenever you start a new proof
{
\def\currentprefix{proof:10} % choose a different prefix for each proof!
...
\locallabel{x_is_nonneg}
...
\localref{x_is_nonneg}
}
答案2
您可以引入以下新命令
\newcommand*\labellocal[1]{\label{exer:\theexample:#1}}
\newcommand*\reflocal[1]{\ref{exer:\theexample:#1}}
\newcommand*\eqreflocal[1]{\eqref{exer:\theexample:#1}}
并将其用作 并用或\labellocal{x_is_nonneg}
引用它。\reflocal{x_is_nonneg}
\eqreflocal{x_is_nonneg}
在内部(全局)标签将是exer:8:x_is_nonneq
。
当然,您可以使用更具区分性的命令,例如\thesection
拥有更本地化的标签样式。