章节和文本文档之间的交叉引用和标记

章节和文本文档之间的交叉引用和标记

假设我的部分有不同的名称,一个简单的问题:是否有任何方法可以使用文档中的交叉引用来定位到部分,而无需在部分中使用标记?例如,使用类似这样的方法可能会很有用:

\ref{namesection}

答案1

\section这是一个基于 LuaLaTeX 的解决方案。它不会修改、\subsection和的定义\subsubsection。这很有用,因为如果分段命令包含可能出现在目录中的可选参数,则不会出现任何问题。相反,该解决方案设置了一个 Lua 函数,该函数在处理的早期阶段(在 LaTeX 开始其常规处理之前)扫描输入行,并自动将所有实例替换为\section{...}\section{...}\label{...}唯一的输入语法要求是\section命令及其相关的完整参数都在一行上——不允许换行。

综上所述,我想说必须手动提供一些\label语句会更容易......

在此处输入图片描述

% !TeX program = lualatex
\documentclass{article}

\usepackage{luacode}
\begin{luacode}
function add_label ( s )
  return ( string.gsub ( s , "(\\.-section.*)(%b{})", "%1%2\\label%2" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
   "process_input_buffer" , add_label , "add_label" )}}

\begin{document}
\tableofcontents

\section[Hello]{Hello World} % note: no "\label" statement
\subsection[Goodbye]{Goodbye World} % note: no "\label" statement

A cross-reference to section \ref{Hello World}.

\noindent
Another cross-reference to subsection \ref{Goodbye World}.
\end{document}

答案2

当然可以,但要小心:

在此处输入图片描述

\documentclass{article}

\usepackage{xparse,lipsum}

\let\oldsection\section
\RenewDocumentCommand{\section}{s o m}{%
  \IfBooleanTF{#1}
    {% \section*
      \oldsection*{#3}% \section*[.]{..}
    }{% \section
      \IfValueTF{#2}
        {\oldsection[#2]{#3}}% \section[.]{..}
        {\oldsection{#3}}% \section{..}
    }%
    \label{#3}% Force label to match section title
}

\begin{document}

See Section~\ref{A section}.

\section{A section}

% This won't work
% \section{Another \textit{beautiful} section}

\end{document}

为了设置与\label章节标题匹配的,我们重写\section(使用xparse,以便于使用)。

请注意,章节标题内的格式(和其他内容)可能会导致问题。

相关内容