Ich möchte patchen \label
, wobei auch enthalten ist #1
, und es scheint, dass Sie dies bei nach oder unter Verwendung hyperref
tun müssen . (Der Code sollte auch ohne funktionieren.) Das hier habe ich also versucht, und es schlägt fehl:\begin{document}
\AtBeginDocument
hyperref
\documentclass{article}
\usepackage{hyperref}
\usepackage{xpatch}
% Attempt 1 - does nothing
% \pretocmd{\label}{#1}{}{err}
% Attempt 3 - fails (err)
% \AtBeginDocument{\pretocmd{\label}{#1}{}{err}}
% Attempt 4 - fails (err)
\AtBeginDocument{\pretocmd{\label}{##1}{}{err}}
\begin{document}
% Attempt 2 - works, inelegant
% \pretocmd{\label}{#1}{}{err}
Label name is \label{mylabel}.
\end{document}
Antwort1
Ich sehe keine wirkliche Möglichkeit, dieses Henne-Ei-Problem mit etoolbox
(oder xpatch
das ist nur ein Wrapper über seinen Makros) zu lösen. Sie können einfach nicht #1
im Ersetzungsteil von \patchcmd
oder im analogen Teil von verwenden\pretocmd
oder verwenden \apptocmd
, wenn der Befehl im Argument eines anderen Befehls steht, in diesem Fall \AtBeginDocument
.
Es gibt einen Ausweg mitregexpatch
:
\documentclass{article}
\usepackage{regexpatch}
\usepackage{hyperref}
\AtBeginDocument{%
\makeatletter
% \A is the start of string anchor, \cP\# is l3regex for 'parameter token'
\regexpatchcmd{\label}{\A}{\cP\#1}{}{\err}%
\makeatother
}
\begin{document}
Label name is \label{mylabel}.
\end{document}
Auf der anderen Seite Pakete wieshowkeys
oder showlabels
für diesen Zweck viel besser geeignet.