Quiero parchear \label
, involucrando #1
, y parece que con hyperref
, tienes que hacerlo después \begin{document}
de usarlo \AtBeginDocument
. (El código hyperref
también debería funcionar sin ). Así que esto es lo que intenté y falla:
\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}
Respuesta1
No veo una manera real de superar este problema del huevo y la gallina etoolbox
(o xpatch
eso es solo una envoltura de sus macros). Simplemente no puede usar #1
en la parte de reemplazo \patchcmd
o la parte análoga en \pretocmd
o \apptocmd
cuando el comando está en el argumento de otro comando, en este caso \AtBeginDocument
.
Hay una salida con regexpatch
:
\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}
Por otro lado, paquetes como showkeys
o showlabels
son mucho mejores para este propósito.