我的文件中某些部分以如下注释开头:“第一次阅读时可以省略此部分。”
我想在此文本中添加对下一节 (页面) 编号的 (超文本) 引用,我可以通过标记下一节 ( \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}