关于使用 \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}

在此处输入图片描述

相关内容