出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

- Ryuta Kudo の投稿
返信数: 4

アドバイスが欲しいです。

\footnote{...}はページ下部に脚注を入れることができますが、これと同様の使い方で、その出力位置を任意に設定できるコマンドを作りたいと考えているのですが、いかんせんTeX、LaTeXの知識が少なく、苦戦しています。

具体的には、

保毛\mynote{%
保毛太郎は1980年生まれの数学者であり、専門はfuga多様体である。

現在はpiyo大学理学部准教授である。}%
らは、~と主張している。

しかしながら、Foobar\mynote{%
L. Foobarは1975年生まれの数学者であり、専門はFoobaz多様体である。

現在、Barbaz研究所上席研究員である。
}%
は、~と主張している。

〈文章〉

\outputmynote

と入力すれば、

保毛らは、~と主張している。
しかしながら、Foobarは、~と主張している。
〈文章〉
*1 保毛太郎は1980年生まれの数学者であり、専門はfuga多様体である。
現在はpiyo大学理学部准教授である。
*2 L. Foobarは1975年生まれの数学者であり、専門はFoobaz多様体である。
現在、Barbaz研究所上席研究員である。

といったように出力されるようにしたいです。

\title{...}\author{...}などと\maketitleの関係に近いかもしれません。

\mynote{...}とするとカウンタを1増やしたうえで、引数の中身を保存し、\outputmynoteでカウンタ分それらを吐き出し、カウンタをリセット」という設計にしようと考えたのですが、カウンタは\stepcounter{...}でよいとして、複数の\mynote{...}の引数の中身をどう格納し、出力させればよいかわからず苦戦しています。

\footnote{...}の機構を理解していればわかるのかもしれませんが、知識不足もあいまって理解していません(そもそもどこで定義されているのかすら知らない状態です)。

現在、単一のコマンド\mynote{...}ではなく、\mynotei{...}\mynoteii{...}\mynoteiii{...}といったように、それぞれ定義することで何とか運用していますが、やはり単一のコマンド\mynote{...}で処理できるようにしたいです。

何の参考にもならないとは思いますが、現在の愚直な実装を載せてみます。「こいつはこういうことがしたいのか」というのはご理解いただけるかと思い、恥を承知で載せます。

是非アドバイスをいただけると嬉しいです。よろしくお願いします。

\documentclass{ltjsarticle}
\usepackage{tcolorbox}

\makeatletter

\NewDocumentCommand\@mynotetexti{}{}
\NewDocumentCommand\@mynotetextii{}{}
\NewDocumentCommand\@mynotetextiii{}{}

\NewDocumentCommand\mynotei{+m}
{%
    \textsuperscript{*1}%
    \RenewDocumentCommand\@mynotetexti{}{\item #1}%
}
\NewDocumentCommand\mynoteii{+m}
{%
    \textsuperscript{*2}%
    \RenewDocumentCommand\@mynotetextii{}{\item #1}%
}
\NewDocumentCommand\mynoteiii{+m}
{%
    \textsuperscript{*3}%
    \RenewDocumentCommand\@mynotetextiii{}{\item #1}%
}

\NewDocumentCommand\outputmynote{}
{
    \begin{tcolorbox}[title={補足情報},fonttitle=\sffamily]
        \begin{enumerate}
            \@mynotetexti\@mynotetextii\@mynotetextiii
        \end{enumerate}
    \end{tcolorbox}
}

\makeatother

\begin{document}
保毛\mynotei{%
保毛太郎は1980年生まれの数学者であり、専門はfuga多様体である。

現在はpiyo大学理学部准教授である。}%
らは、~と主張している。

しかしながら、Foobar\mynoteii{%
L. Foobarは1975年生まれの数学者であり、専門はFoobaz多様体である。

現在、Barbaz研究所上席研究員である。
}%
は、~と主張している。

〈複数の文〉

\outputmynote
\end{document}
Ryuta Kudo への返信

Re: 出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

- 岩熊 哲夫 の投稿
例えば index ファイルなどの真似をして,一時的にファイル
出力をする方法で,別の目的のマクロを作ったことがあります。
それを流用してみました。なお,最終的な enumerate の
出力部分に * をつけたりはしていません。またメッセージ中に
LaTeX のコマンドなどを入れる場合は \string\command のように
\string が必要です。参考まで
-------------------------------
\documentclass[11pt,a4paper,twoside]{jarticle}
%
\makeatletter
\def\openmessagefile{%
\newwrite\@messagelist
\immediate\openout\@messagelist=\jobname.msg
\immediate\write\@messagelist{\string\begin{enumerate}}
}
%
\long\def\addtomessage#1{%
\immediate\write\@messagelist{\string\item\space #1}%
}
%
\def\closemessagefile{%
\immediate\write\@messagelist{\string\end{enumerate}}
\immediate\closeout\@messagelist
\input{\jobname.msg}
}
\makeatother
\begin{document}

\openmessagefile

あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ

\addtomessage{mess1}

あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ

\addtomessage{mess2}

あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ

\addtomessage{mess3}

あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ

\addtomessage{mess4}

あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ
あいうえおかきくけこさしすせそ

\closemessagefile

\end{document}
岩熊 哲夫 への返信

Re: 出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

- Ryuta Kudo の投稿

ありがとうございます。「*1」などをいれるべく、

\newcounter{mymessage}

としたうえで、

\long\def\addtomessage#1{%
\stepcounter{mymessage}%
\hbox{}\hbox{\textsuperscript{\textasteriskcentered\arabic{mymessage}}}\hbox{}%
\immediate\write\@messagelist{\string\item\space #1}%
}

としてみたところ、所望の出力となりました。

※ enumerate環境のラベルの方はenumitemパッケージを使って「*1」になるように変更しました。

外部ファイルへの書き出しはこのようにして行えるのですね。

他にもいろいろな使い方ができそうで、勉強になりました。ありがとうございました。

Ryuta Kudo への返信

Re: 出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

- ut の投稿
endnotes パッケージを使っても、出来そうな気がします
(以下は、レイアウトの調整などをしていないシンプルな例です):

\documentclass[dvipdfmx]{jsarticle}
\usepackage{tcolorbox}
\usepackage{endnotes}

\renewcommand{\notesname}{}
\let\enoteheading\relax
\renewcommand{\makeenmark}{\textsuperscript{*\theenmark}}

\begin{document}
保毛\endnote{%
保毛太郎は1980年生まれの数学者であり、専門はfuga多様体である。

現在はpiyo大学理学部准教授である。}%
らは、~と主張している。

しかしながら、Foobar\endnote{%
L. Foobarは1975年生まれの数学者であり、専門はFoobaz多様体である。

現在、Barbaz研究所上席研究員である。
}%
は、~と主張している。

〈複数の文〉

\begin{tcolorbox}[title={補足情報},fonttitle=\sffamily]
\theendnotes
\end{tcolorbox}


%\setcounter{endnote}{0}


保毛\endnote{%
保毛太郎は1980年生まれの数学者であり、専門はfuga多様体である。

現在はpiyo大学理学部准教授である。}%
らは、~と主張している。

しかしながら、Foobar\endnote{%
L. Foobarは1975年生まれの数学者であり、専門はFoobaz多様体である。

現在、Barbaz研究所上席研究員である。
}%
は、~と主張している。

〈複数の文〉

\begin{tcolorbox}[title={補足情報},fonttitle=\sffamily]
\theendnotes
\end{tcolorbox}

\end{document}


・追記 1:

> そもそもどこで定義されているのかすら知らない状態です

\footnote が定義されているのは、ltfloat.dtx ですね。

(最新の source2e.pdf [2023-06-01 Patch level 1] だと
File P: ltfloat.dtx Date: 2021/10/14 Version v1.2g)


・追記 2:

(endnotes パッケージの現在のメンテナって LaTeX3 Project/
David Carlisle さんなんですね…)

(endnotesj パッケージのメンテナも、今は aminophen さんなん
ですね…)

ut への返信

Re: 出力位置を調整可能な\footnote{...} likeなコマンドを作成したい

- Ryuta Kudo の投稿

ありがとうございます。

endnotesパッケージでも実現できるのですね。ltjsarticleでも動作しました。

私はまったく思いつきもしなかったので、たいへん助かりました。

\makeenmark

\renewcommand{\makeenmark}{\hbox{}\hbox{\textsuperscript{\textasteriskcentered\theenmark}}\hbox{}}

としてみました。


\footnoteltfloat.dtxで定義されているのですね。情報をありがとうございます。

いつか実装を理解できるようになりたいです。