交叉引用下一节,无论它是什么

交叉引用下一节,无论它是什么

我的文件中某些部分以如下注释开头:“第一次阅读时可以省略此部分。”

我想在此文本中添加对下一节 (页面) 编号的 (超文本) 引用,我可以通过标记下一节 ( \label{sec:next}) 并使用\ref{sec:next}and/or来实现\pageref{sec:next}。但是,由于sec:next标签是硬编码的,因此如果节的顺序发生变化,引用可能会出错。

因此我的问题是:有没有办法引用下一部分,无论它是什么?

答案1

我们必须设置一个\label将在下一个\section命令中进行评估的。

因此我修补了,为其参数(指主节标题)\@sect添加一个命令,该命令仅在 调用该命令并发出命令时才进行评估。 和 也需要修补,因为它们都用于排版标题。 的参数是通过计数器自动生成的。\label#8\section\nextsection\section\subsection\@sect\label

hyperref请注意,必须在加载之前进行修补。

\documentclass{article}
\usepackage{etoolbox}

\makeatletter
\newif\if@nextsection
\newif\if@section
\newcounter{ns@count}
\newcommand{\nextsection}{%
  \global\@nextsectiontrue
  \stepcounter{ns@count}%
  \xdef\@nstemp{ns@@\thens@count}%
  \ref{ns@@\@nstemp}%
}

\patchcmd{\@sect}
  {#8}
  {#8%
   \if@section\if@nextsection
     \label{ns@@\@nstemp}\global\@nextsectionfalse
   \fi\fi}
  {}{}
\preto\section{\global\@sectiontrue}
\preto\subsection{\global\@sectionfalse}
\makeatother

%%% hyperref should go after the patch, if used
\usepackage{hyperref}


\begin{document}
\section{TL;DR}

This section is long, go to section~\nextsection.

\subsection{A}

\newpage

\section{THIS IS IT}\label{foo}

\newpage

\section{Again TL;DR}
Check if it works \ref{foo}; now go to section~\nextsection.

\newpage

\section{Another}
\end{document}

答案2

该答案已被编辑以适用于下一部分,下一小节以及下一小节。

本质上,与其尝试在一个地方调用一个标签以应用于后续的报告部分,我更愿意创建宏\nextsection\nextsubsection和 ,\nextsubsubsection其中下一个 [[sub]sub] 节号是根据当前 [[sub]sub] 节号计算的。但是,这将要求您提前知道下一个节单元实体是节、子节还是子子节。

\documentclass{article}
\newcounter{nextsec}
\newcommand\nextsection{%
  \setcounter{nextsec}{\thesection}%
  \stepcounter{nextsec}%
  \thenextsec%
}
\newcommand\nextsubsection{%
  \setcounter{nextsec}{\expandafter\parsesub\thesubsection\relax}%
  \stepcounter{nextsec}%
  \thesection.\thenextsec%
}
\newcommand\nextsubsubsection{%
  \edef\tmp{\thesubsubsection}%
  \setcounter{nextsec}{\expandafter\parsesubsub\tmp\relax}%
  \stepcounter{nextsec}%
  \thesubsection.\thenextsec%
}
\def\parsesub#1.#2\relax{#2}
\def\parsesubsub#1.#2.#3\relax{#3}
\begin{document}

\section{First Section\label{s:first}}

This is section \ref{s:first}.  The following section is \nextsection,\\
but the next subsection is \nextsubsection.

\subsection{A subsection\label{s:firstsub}}

This is subsection \ref{s:firstsub}.  The following subsection is \nextsubsection.

\subsection{Next subsection}

\section{Next Section}

The next subsubsection will be \nextsubsubsection.

\end{document}

在此处输入图片描述

相关内容