\renewコマンドを使用してパッケージを適応させることに関する質問

\renewコマンドを使用してパッケージを適応させることに関する質問

この記事は以下のサブ質問です:2 種類の末尾脚注の相互参照 (分離され、異なる色の番号が付けられている)


こんにちは、

私は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}

ここに画像の説明を入力してください

関連情報