我希望能够在文档中链接到另一个部分,而不必在其他部分命令后明确放置标签。hyperref
TOC 标签就是这么做的,所以我认为这不是一个疯狂的愿望。我有一个非常大的文档要转换成 LaTeX(1100 页),并且大部分转换在 、 和 声明方面已经实现自动化\section
。\subsection
但\subsubsection
我还需要能够根据其名称链接到其他部分。
举个例子,文本(游戏规则手册)将引用另一部分中写的规则,例如:
即使生物对酸的腐蚀性具有免疫力,但如果它们完全浸入水中,也可能会溺水(参见溺水)。
然后“(参见溺水)”应该将单词溺水作为指向标题为溺水的部分(或小节)的链接。
当我浏览并添加链接时,并不总是清楚哪些其他部分将是章节或小节(由于工作量很大,我无法一直记住所有内容),所以我希望章节、小节和小小节在其标签上都有相同的“前缀”'sec:'
现在我有一个命令
\newcommand{\skillentry}[2]{\subsection[#1]{#1 #2}\index{#1}\label{skill:#1}}
然后是相关命令
\newcommand{\linkskill}[1]{\hyperref[skill:#1]{#1}}
鉴于任何两个章节、小节或小子章节都不会有重复的名称,而且整个文档已经写好了,所以我不想只使用自定义命令,它似乎合理的解决方案是重新定义\@makesectionhead
,使其包括
\label{sec:#1}
在\section
、\subsection
和\subsubsection
命令定义中(#1
这里是要创建的部分的名称),以及自定义快捷命令,例如:
\newcommand{\linksec}[1]{\hyperref[sec:#1]{#1}}
然后在适当的地方我只需写上(see
\linksec{Drowning} )
,所有东西就会正确连接起来。如果这听起来很疯狂,请立即阻止我。
问题是我不知道该\section
命令实际上在做什么。我确实有一个自定义章节外观,这涉及到更改\@makechapterhead
,所以我假设要更改部分的工作方式,它会是\@makesectionhead
,但我不知道的默认定义是什么\@makesectionhead
,而且我似乎无法通过谷歌搜索找到它(可能是因为我不知道要搜索什么)。
所以问题是:我该如何重新定义\section
、\subsection
和 ,\subsubsection
使它们包含如上所示的标签,但不改变它们的外观或类似的东西。如果相关的话,我会使用 Memoir 类(我认为是相关的)。我也没有对任何分段命令使用任何自定义外观(尽管我支持\chapter
),因为我很喜欢它们的默认外观。
答案1
我不完全确定我是否理解了这个问题,但还是说一下。
您可以使用\renewcommand
、\section
、\subsection
等命令来添加\label
您选择的。棘手的部分是这些命令中的每一个都带有一个可选参数(用于标题和toc
)。幸运的是,这个问题已经在上一个问题中得到解决
这是 MWE-如果我误解了,请告诉我
\documentclass{memoir}
\usepackage{letltxmacro}
\LetLtxMacro{\oldsection}{\section}
\renewcommand{\section}[2][]{\oldsection[#1]{#2}\index{#1}\label{sec:#1}}
\begin{document}
\section[drowning]{Drowning}
Test reference \ref{sec:drowning}
\end{document}
答案2
我认为走私的最简单方法\label
是使用\sectionmark
:
\documentclass[]{memoir} % Abstand zwischen 2 Absätzen, kein Einrücken (parindent)
\let\orisectionmark\sectionmark
\renewcommand\sectionmark[1]{\label{sec:#1}\orisectionmark{#1}}
\begin{document}
\chapter{Blub}
\section[shortname]{Something very long and perhaps dangerous for a label}
\section{B}
%\section{$\int$} % this breaks!
\ref{sec:shortname}, \ref{sec:B}
\end{document}
但请注意,虽然\label
接受很多种类型的参数,但并非所有参数都能起作用。