我想修补该命令,以尽可能通用的方式section
在末尾添加一个简单命令(例如,我不想假设命令的参数数量,因此我不能直接使用和重新定义)。\label
section
\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
并非如此。查看\section
article.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
。如果您有多个部分,它将导致多重定义的标签。