Este artigo é uma subquestão de:Referência cruzada em 2 tipos de notas finais (separadas e com números de cores diferentes)
Oi,
Estou tentando adaptar um pacote chamado parnotes (que pode ser chamado usando \usepackage{parnotes}
. Seu código fonte original pode ser baixadono CTAN aqui.
A linha de código que desejo "adaptar" (ou seja, alterar quando implementada em outro documento .tex) reside dentro da seguinte parte:
\long\def\PN@parnote@real#1{
\global\advance\c@PN@t\@ne
\g@addto@macro\PN@text{
\global\advance\c@PN@n\@ne
\parnotemarkfmt{PN@n}\nolinebreak\thinspace#1
\unless\ifnum\c@PN@n=\c@PN@t
\parnoteintercmd
\fi
}
\unskip\parnotemarkfmt{PN@t}
}
A única linha que quero mudar é a última. Eu gostaria que se tornasse:
\unskip\textsuperscript{\parnotemarkfmt{PN@t}}
Eu sei quando essa mudança funciona perfeitamente (ajustei o código-fonte para download no CTAN), mas gostaria de pedir ajuda, pois não sei como alterar essa linha de código de fora (ou seja, de um novo .tex -arquivo).
Eu pensaria (já que consegui adaptar outra linha de código da fonte desta forma) alguém usaria no preâmbulo de um novo documento .tex:
\makeatletter
\renewcommand{...???...}
\makeatother
Ou talvez alguém conheça uma forma alternativa de usar \let ...
?
Muito obrigado antecipadamente.
Responder1
Aqui está um exemplo mínimo:
\documentclass{article}
\usepackage{parnotes}
\begin{document}
\begin{autopn}
Text\parnote{parnote}
Text
\end{autopn}
\end{document}
quais saídas
Com a mudança proposta, isso se tornaria
isso é definitivamente ruim, porque o expoente é muito alto (além de ser muito pequeno, mas é uma questão de gosto).
A maneira “fácil” com a qual produzi o exemplo é
\usepackage{etoolbox}
\makeatletter
\patchcmd{\PN@parnote@real}
{\parnotemarkfmt{PN@t}}
{\textsuperscript{\parnotemarkfmt{PN@t}}}
{}{}
\makeatother
Existem muitos exemplos de como \patchcmd
pode ser usado; veja, por exemplo,Por favor, ensine o uso de patchcmd e xpatch
No entanto, neste caso, este é o caminho errado a seguir. Na verdade, o pacote fornece \parnotemarkfmt
exatamente a finalidade de formatar o marcador no texto.
Sua definição pelo pacote é
\providecommand{\parnotemarkfmt}[1]{\textsuperscript{\PN@mark@set{#1}}}
(aliás, \newcommand
deveria ser usado aqui, mas não tem importância para o tópico em questão). Como você vê, \textsuperscript
é usado. Para informação, \PN@mark@set
é, por padrão, o mesmo que \arabic
.
Se quiser reduzir o tamanho do expoente, você pode simplesmente alterar a definição de \parnotemarkfmt
. Se quiser um expoente menor, você pode definir uma \textsmallsuperscript
macro com base no que \textsuperscript
faz:
% latex.ltx, line 6017:
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
Então podemos fazer
\DeclareRobustCommand*\textsmallsuperscript[1]{%
\vincent@textsmallsuperscript{\selectfont#1}}
\def\vincent@textsmallsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\ssf@size\z@#1}}}}}
Usar um prefixo antes do “marcador macro interno” @
é uma boa prática.
Exemplo completo:
\documentclass{article}
\usepackage{parnotes}
\makeatletter
\DeclareRobustCommand*\textsmallsuperscript[1]{%
\vincent@textsmallsuperscript{\selectfont#1}}
\def\vincent@textsmallsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\ssf@size\z@#1}}}}}% <--- use scriptscriptsize
\renewcommand{\parnotemarkfmt}[1]{\textsmallsuperscript{\PN@mark@set{#1}}}
\makeatother
\begin{document}
\begin{autopn}
Text\parnote{parnote}
Text
\end{autopn}
\end{document}