我想添加指向讨论文件的部分的超链接。此外,还应将用法添加到索引中。原则上,这非常接近标签引用系统。
一个简单的方法是
\newcommand{\labelfile}[1]{%
\hypertarget{file:#1}{}%
\index{file!#1}%
\csname doc@file@#1\endcsname%
}
\newcommand{\file}[1]{%
\ifcsdef{doc@file@#1}{%
\hyperlink{file:#1}{#1}%
}{%
\texttt{#1}%
}%
}
可以用作
\section{about links in pdf}
The code is in \file{preamble/hyperref.tex}
...
\section{preamble/hyperref.tex}
\labelfile{preamble/hyperref.tex}
但是它不起作用,因为标签是在 ref 命令之后创建的。所以我需要将所有内容添加到 aux 文件中并再次读取。但是我该如何实现呢?
此外,我希望索引中的所有内容都
files
preamble
hyperref.tex
然而,这需要将其传递给索引
\index{files!preamble!hyperref.tex}
然而我却认为
\index{files!preamble/hyperref.tex}
/
我怎样才能用替换 char !
?
答案1
您可以使用常规 \label/\ref 系统来实现此目的。然后使用
\hyperref[label]{text}
讨论\标签设置和目的地名称
A\label
在将参考数据写入文件时使用当前活动的锚点(通常是最后一个锚点集).aux
。该示例未显示 的目标是否preamble/hyperref.tex
应为具有相同标题的部分,或者应将其移动到 的位置\labelfile
。在第一种情况下,解决方案示例文件中标记之间的部分%%%
应该是:
%%%
\newcommand*{\labelfile}[1]{%
\label{file:#1}%
\index{file!#1@\string\FileName{#1}}%
}
%%%
如果\labelfile
应该设置自己的锚点,但目的地名称无关紧要,则%%%
标记之间的部分应该是:
%%%
\newcommand*{\labelfile}[1]{%
\phantomsection
\label{file:#1}%
\index{file!#1@\string\FileName{#1}}%
}
%%%
锚点设置由 完成\phantomsection
。
hyperref
下面的完整变体还控制目标名称。它使用对的重新定义\refstepcounter
设置锚点的事实。(使用默认选项)目标名称由计数器名称和计数器值构成。不同的目的地不能共享相同的目标名称。问题是\the<counter>
并不总是唯一的。因此hyperref
用于\theH<counter>
目标名称。这里的文件名是唯一的,因为它们也用于\label
。\thefile
显示这里不需要的“文件编号”(在文档末尾它可用于获取最大文件数)。\theHfile
完全不同,它显示文件名和目标名称将file.example.tex
用于文件example.tex
,第一部分file
是计数器名称,以下点是硬连线的,其余部分是文件名。
文件名格式
文件名可以采用多种格式。有些软件包可以处理连字符、字体设置等。例如,我使用软件包url
定义了一个格式化命令\FileName
,并将其添加到索引条目中,以显示索引条目的特殊语法。我假设文件名不包含太花哨的字符。否则,需要做一些额外的工作来处理有问题的字符。
\documentclass{article}
\usepackage{hyperref}
\usepackage{url}
\DeclareUrlCommand{\FileName}{\urlstyle{tt}}
\usepackage{makeidx}
\makeindex
%%%
\newcounter{file}
\providecommand*{\theHfile}{\thefile}
\newcommand*{\labelfile}[1]{%
\renewcommand*{\theHfile}{#1}%
\refstepcounter{file}%
\label{file:#1}%
\index{file!#1@\string\FileName{#1}}%
}
%%%
\newcommand*{\file}[1]{%
\hyperref[file:#1]{\FileName{#1}}%
}
\begin{document}
\section{about links in pdf}
The code is in \file{preamble/hyperref.tex}
\dots
\section{preamble/hyperref.tex}
\labelfile{preamble/hyperref.tex}
\printindex
\end{document}