Eu quero corrigir \label
, envolver #1
, e parece que com hyperref
, você tem que fazer isso depois \begin{document}
ou usando \AtBeginDocument
. (O código hyperref
também deve funcionar sem.) Então foi isso que tentei e falhou:
\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}
Responder1
Não vejo nenhuma maneira real de superar esse problema do ovo e da galinha etoolbox
(ou xpatch
isso é apenas um invólucro sobre suas macros). Você simplesmente não pode usar #1
na parte de substituição \patchcmd
ou na parte análoga em \pretocmd
ou \apptocmd
quando o comando está no argumento de outro comando, neste caso \AtBeginDocument
.
Existe uma saída com 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 outro lado, pacotes como showkeys
ou showlabels
são muito melhores para esse fim.