Una pregunta sobre el uso de un comando \renew para adaptar un paquete

Una pregunta sobre el uso de un comando \renew para adaptar un paquete

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

ingrese la descripción de la imagen aquí

Con el cambio propuesto se convertiría en

ingrese la descripción de la imagen aquí

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 \patchcmdse 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 \parnotemarkfmtexactamente 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, \newcommanddebería usarse aquí, pero no tiene importancia para el tema que nos ocupa). Como veis, \textsuperscriptestá usado. A título informativo, \PN@mark@setes, 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 \textsmallsuperscriptmacro basada en lo que \textsuperscripthace:

% 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}

ingrese la descripción de la imagen aquí

información relacionada