我正在hyperref
书籍类文档中使用该包。
我有几个部分想要参考。
这是我的问题:我创建了一个新命令:
\newcommand{\partie}[1]{\hyperref[#1]{partie~\Roman{part}}}
然后假设我有几个部分:
\part{First one} \label{first}
\part{Second one} \label{second}
\part{Third one} \label{third}
这样当我打电话时:
\partie{third}
我明白了
第三部分
问题是,当我调用\partie{third}
文档的第一部分时,它会产生:
第一部分
我该怎么做才能修复这个问题?
万分感谢。
答案1
请使用 LaTeX 内置的交叉引用系统以及 和 的hyperref
扩展cleveref
。
只要没有名为 的超目标锚点third
\hyperref
就会抱怨partie I
,但会在第一部分打印 ,因为部分编号在1
那里,所以\Roman{part}
扩展为I
。
更好的方法:使用\cref{third}
或\Cref{third}
将标签third
放置在正确的位置,并cleveref
选择nameinlink
所引用单位的名称也将出现在链接中。
还有\autoref{third}
,它将打印Partie III
,即第一个字符大写。
\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{hyperref}
\usepackage[french]{cleveref}
\newcommand{\partie}[1]{\hyperref[#1]{partie~\ref*{#1}}}
\begin{document}
\part{Un}
\cref{third} or \partie{third}
\part{Deux}
\part{Trois}\label{third}
Foo
\end{document}
答案2
零件编号的标签名称#1
已经存在于问题的宏定义中:
\newcommand{\partie}[1]{\hyperref[#1]{partie~\Roman{part}}}
因此,可以在宏中引用标签\partie
以获取零件编号。使用星号形式可以避免嵌套链接\ref
:
\newcommand{\partie}[1]{\hyperref[{#1}]{partie~\ref*{#1}}}
当然,我假设零件计数器已正确设置并\thepart
扩展到\Roman{part}
。