本文是以下問題的子問題:兩個尾註的交叉引用(分開並用不同顏色的數字)
你好,
我正在嘗試改編一個名為 parnotes 的套件(可以使用 呼叫\usepackage{parnotes}
。它的原始原始碼可以下載在 CTAN 這裡。
我想要「適應」的程式碼行(即在另一個 .tex 文件中實現時進行更改)位於以下片段中:
\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}
}
我唯一想改變的是最後一行。我希望它成為:
\unskip\textsuperscript{\parnotemarkfmt{PN@t}}
我知道這個更改何時執行完美(我調整了 CTAN 上的可下載原始程式碼),但我想向您尋求協助,因為我不知道如何從外部更改這行程式碼(即從新的 .tex -檔案)。
我想(因為我能夠以這種方式調整原始程式碼的另一行程式碼)可以在新的 .tex 文件的序言中使用:
\makeatletter
\renewcommand{...???...}
\makeatother
或者也許有人知道使用的替代方法\let ...
?
提前謝謝了。
答案1
這是一個最小的例子:
\documentclass{article}
\usepackage{parnotes}
\begin{document}
\begin{autopn}
Text\parnote{parnote}
Text
\end{autopn}
\end{document}
哪個輸出
根據您提議的更改,它將變成
這絕對是不好的,因為指數太高了(除了太小之外,但這是一個品味問題)。
我產生範例的“簡單”方法是
\usepackage{etoolbox}
\makeatletter
\patchcmd{\PN@parnote@real}
{\parnotemarkfmt{PN@t}}
{\textsuperscript{\parnotemarkfmt{PN@t}}}
{}{}
\makeatother
有很多如何\patchcmd
使用的例子;例如,參見請指導patchcmd和xpatch的使用
然而,在這種情況下,這是錯誤的做法。事實上,該包\parnotemarkfmt
正是為了格式化文字中的標記而提供的。
它的套件定義是
\providecommand{\parnotemarkfmt}[1]{\textsuperscript{\PN@mark@set{#1}}}
(順便說一下,\newcommand
應該在這裡使用,但這對當前的主題沒有影響)。如您所見,\textsuperscript
已使用。有關信息,\PN@mark@set
預設情況下與 相同\arabic
。
如果你想減少指數的大小,你可以簡單地改變 的定義\parnotemarkfmt
。如果你想要一個更小的指數,你可以\textsmallsuperscript
根據以下內容定義一個巨集\textsuperscript
:
% latex.ltx, line 6017:
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
所以我們可以做
\DeclareRobustCommand*\textsmallsuperscript[1]{%
\vincent@textsmallsuperscript{\selectfont#1}}
\def\vincent@textsmallsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\ssf@size\z@#1}}}}}
在「內部巨集標記」之前使用前綴@
是一種很好的做法。
完整範例:
\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}