Este artículo es una subpregunta de:Referencia cruzada de 2 tipos de notas finales (separadas y con números de diferente color)
Hola,
Estoy intentando adaptar un paquete llamado parnotes (al que se puede llamar usando \usepackage{parnotes}
. Su código fuente original se puede descargaren CTAN aquí.
La línea de código que quiero "adaptar" (es decir, cambiar cuando se implemente en otro documento .tex) se encuentra dentro de la siguiente pieza:
\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}
}
La única línea que quiero cambiar es la última. Me gustaría que se convirtiera en:
\unskip\textsuperscript{\parnotemarkfmt{PN@t}}
Sé cuando este cambio funciona perfecto (modifiqué el código fuente descargable en CTAN), pero me gustaría pedirles ayuda, ya que no sé cómo cambiar esta línea de código desde afuera (es decir, desde un nuevo .tex). -archivo).
Creo que (ya que pude adaptar otra línea de código fuente de esta manera) se usaría en el preámbulo de un nuevo documento .tex:
\makeatletter
\renewcommand{...???...}
\makeatother
¿O tal vez alguien conoce una forma alternativa de usar \let ...
?
Muchas gracias de antemano.
Respuesta1
Aquí hay un ejemplo mínimo:
\documentclass{article}
\usepackage{parnotes}
\begin{document}
\begin{autopn}
Text\parnote{parnote}
Text
\end{autopn}
\end{document}
que salidas
Con el cambio propuesto se convertiría en
eso definitivamente es malo, porque el exponente es demasiado alto (además de demasiado pequeño, pero esto es una cuestión de gustos).
La forma “fácil” con la que produje el ejemplo es
\usepackage{etoolbox}
\makeatletter
\patchcmd{\PN@parnote@real}
{\parnotemarkfmt{PN@t}}
{\textsuperscript{\parnotemarkfmt{PN@t}}}
{}{}
\makeatother
Hay muchos ejemplos de cómo \patchcmd
se puede utilizar; ver, por ejemplo,Por favor enseñe el uso de patchcmd y xpatch.
Sin embargo, en este caso este es el camino equivocado. De hecho, el paquete proporciona \parnotemarkfmt
exactamente el propósito de formatear el marcador en texto.
Su definición por paquete es
\providecommand{\parnotemarkfmt}[1]{\textsuperscript{\PN@mark@set{#1}}}
(por cierto, \newcommand
debería usarse aquí, pero no tiene importancia para el tema que nos ocupa). Como veis, \textsuperscript
está usado. A título informativo, \PN@mark@set
es, por defecto, lo mismo que \arabic
.
Si desea reducir el tamaño del exponente, simplemente puede cambiar la definición de \parnotemarkfmt
. Si desea un exponente más pequeño, puede definir una \textsmallsuperscript
macro basada en lo que \textsuperscript
hace:
% latex.ltx, line 6017:
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
Entonces podemos hacer
\DeclareRobustCommand*\textsmallsuperscript[1]{%
\vincent@textsmallsuperscript{\selectfont#1}}
\def\vincent@textsmallsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\ssf@size\z@#1}}}}}
Usar un prefijo antes del "marcador macro interno" @
es una buena práctica.
Ejemplo 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}