我经常在论文中使用相应章节或文本块的引用。
因此,我已经定义了很多\label{}
命令,我尝试用命名约定对它们进行分类int:txt:WhatIsItAbout
,以便清楚地表明它在章节介绍中,指的是一个文本块,它是关于......
但是,所有页码引用仅包含标签排版的页面。如果我引用的章节或部分跨越多页,我希望使用如下页码S. 23f或者第 23 条及后续
通过引用文本块它看起来更加复杂(因为范围的结束不是由同一级别的下一个对象的出现来定义的):我在某处添加了一个标签,但是为了定义文本范围,我必须在文本块的末尾定义第二个标签,这会让事情变得更加混乱。
我知道varioref
可以生成这种“智能”引用的软件包,但是对于页面范围,它也需要 2 个标签。
(如下所述:创建一个“\label”,如有必要,可跨越多个页面)
- 有没有办法避免这种情况,例如定义一个环境
- 可以参考一下,自动输出开始和结束页面吗?
- 或者在其开头和结尾创建 2 个标签,例如称为 LabelnameS 和 LabelnameE (表示开始和结束)和
\vref
可以通过明确输入 2 个标签名称的命令 来读取- 或者通过专门定义的 ref 命令,
\rangeref{Labelname}
如果开始和结束在不同的页面上,则它会自动扩展并创建页面范围。
备注:但是,如果真的要为此使用一个环境,那么如果两个这样的环境“相交”(第二个环境的开始早于第一个环境的结束,但第二个环境的结束晚于第一个环境的结束),则可能会引起问题。
- 您如何处理这个问题?
- 您是否避免引用页面范围,或者您是否始终创建 2 个标签?
- 如何命名标签才能使其简短而清晰?
答案1
由于您的范围可能会相交,因此定义环境是不可能的。需要标记范围的开始和结束,并且需要创建两个标签;但是,LaTeX 可以为您完成此操作:
\newcommand{\rangelabelstart}[1]{\label{#1START}}
\newcommand{\rangelabelend}[1]{\label{#1END}}
\newcommand{\rangeref}[1]{\pageref{#1START}--\pageref{#1END}}
...
\begin{document}
...
\rangelabelstart{xyz}
Text
\rangelabelend{xyz}
...
\rangeref{xyz}
您只提供一个标签,而 LaTeX 则负责使用其中两个标签。当然,您必须更好地定义 的操作\rangeref
。该zref
包应考虑用于高级\label
管理\ref
。