關於使用 \renewcommand 來調整套件的問題

關於使用 \renewcommand 來調整套件的問題

本文是以下問題的子問題:兩個尾註的交叉引用(分開並用不同顏色的數字)


你好,

我正在嘗試改編一個名為 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}

在此輸入影像描述

相關內容