如何创建我自己的参考标签系统?

如何创建我自己的参考标签系统?

我想添加指向讨论文件的部分的超链接。此外,还应将用法添加到索引中。原则上,这非常接近标签引用系统。

一个简单的方法是

\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}

相关内容