本文是以下问题的一个子问题:交叉引用两种尾注(分开且用不同颜色的数字表示)
你好,
我正在尝试调整一个名为 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}