补丁部分命令失败

补丁部分命令失败

我想修补该命令,以尽可能通用的方式section在末尾添加一个简单命令(例如,我不想假设命令的参数数量,因此我不能直接使用和重新定义)。\labelsection\let\section

但是,修补后的版本将标题移到了部分之外:

在此处输入图片描述

\documentclass{article}

\usepackage{etoolbox}

\ifdef{\section}{
  \ifpatchable*{\section}{
    \apptocmd{\section}{{\label{DEF}}}{}{}%
  }{}
}

\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}

\section{Name of my section}

Hello everybody. \cref{DEF}

\end{document}

答案1

您假设这是设置编号部分的命令。但事实\section并非如此。查看\sectionarticle.cls

\newcommand\section{\@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\normalfont\Large\bfseries}}

\section事实上,还调用\@startsection了一堆其他参数。

如果您想向编号部分添加通用标签,则可以使用补丁,但对于\@sect

在此处输入图片描述

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\apptocmd{\@sect}{\label{DEF}}{}{}%
\makeatother

\usepackage{hyperref}
\usepackage{cleveref}

\begin{document}

\section{Name of my section}

Hello everybody. \cref{DEF}

\end{document}

未编号部分\@ssect在内部使用,因此这仅适用于编号部分。但这完全合理。如果修复独立\label于,您的请求中的内容就没有意义了\section。如果您有多个部分,它将导致多重定义的标签。

相关内容