“自动”部分标签?

“自动”部分标签?

我希望能够在文档中链接到另一个部分,而不必在其他部分命令后明确放置标签。hyperrefTOC 标签就是这么做的,所以我认为这不是一个疯狂的愿望。我有一个非常大的文档要转换成 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接受很多种类型的参数,但并非所有参数都能起作用。

相关内容