Dieser Artikel ist eine Unterfrage von:Querverweise auf 2 Arten von Endfußnoten (getrennt und mit unterschiedlich farbigen Nummern)
Hallo,
Ich versuche, ein Paket namens parnotes anzupassen (das mit aufgerufen werden kann \usepackage{parnotes}
. Der ursprüngliche Quellcode kann heruntergeladen werdenbei CTAN hier.
Die Codezeile, die ich „anpassen“ möchte (d. h. ändern, wenn sie in ein anderes .tex-Dokument implementiert wird), befindet sich im folgenden Teil:
\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}
}
Die einzige Zeile, die ich ändern möchte, ist die letzte. Sie soll lauten:
\unskip\textsuperscript{\parnotemarkfmt{PN@t}}
Ich weiß, wann diese Änderung einwandfrei funktioniert (ich habe den herunterladbaren Quellcode bei CTAN optimiert), aber ich möchte Sie um Hilfe bitten, da ich nicht weiß, wie ich diese Codezeile von außen (d. h. von einer neuen .tex-Datei aus) ändern kann.
Ich würde denken (da ich auf diese Weise eine weitere Codezeile der Quelle anpassen konnte), dass man in der Präambel eines neuen .tex-Dokuments Folgendes verwenden würde:
\makeatletter
\renewcommand{...???...}
\makeatother
Oder kennt vielleicht jemand eine alternative Möglichkeit, dies zu verwenden \let ...
?
Vielen Dank im Voraus.
Antwort1
Hier ist ein Minimalbeispiel:
\documentclass{article}
\usepackage{parnotes}
\begin{document}
\begin{autopn}
Text\parnote{parnote}
Text
\end{autopn}
\end{document}
welche Ausgänge
Mit der von Ihnen vorgeschlagenen Änderung würde es
das ist auf jeden Fall schlecht, da der Exponent zu hoch ist (abgesehen davon, dass er zu klein ist, aber das ist Geschmacksfrage).
Der „einfache“ Weg, mit dem ich das Beispiel erstellt habe, ist
\usepackage{etoolbox}
\makeatletter
\patchcmd{\PN@parnote@real}
{\parnotemarkfmt{PN@t}}
{\textsuperscript{\parnotemarkfmt{PN@t}}}
{}{}
\makeatother
Es gibt viele Beispiele für die \patchcmd
Verwendung vonBitte unterrichten Sie die Verwendung von patchcmd und xpatch
Dies ist in diesem Fall allerdings der falsche Weg. Das Paket sieht nämlich \parnotemarkfmt
genau den Zweck vor, die Markierung im Text zu formatieren.
Die Definition durch das Paket lautet
\providecommand{\parnotemarkfmt}[1]{\textsuperscript{\PN@mark@set{#1}}}
(sollte hier übrigens \newcommand
verwendet werden, hat aber für das vorliegende Thema keine Bedeutung). Wie Sie sehen, \textsuperscript
wird verwendet. Zur Information \PN@mark@set
ist standardmäßig dasselbe wie \arabic
.
Wenn Sie die Größe des Exponenten verringern möchten, können Sie einfach die Definition von ändern \parnotemarkfmt
. Wenn Sie einen kleineren Exponenten möchten, können Sie ein \textsmallsuperscript
Makro basierend auf dem definieren, was \textsuperscript
bewirkt:
% latex.ltx, line 6017:
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
Wir können also
\DeclareRobustCommand*\textsmallsuperscript[1]{%
\vincent@textsmallsuperscript{\selectfont#1}}
\def\vincent@textsmallsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\ssf@size\z@#1}}}}}
@
Es empfiehlt sich, vor dem „internen Makromarker“ ein Präfix zu verwenden .
Vollständiges Beispiel:
\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}