Hyperref,自定义零件命令

Hyperref,自定义零件命令

我正在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}

相关内容