multicolsの脚注をカラムごとに排出させたい

multicolsの脚注をカラムごとに排出させたい

- KK TeX の投稿
返信数: 4

multicolsでは仕様上、multicols環境の外に1段組で脚注が表示されてしまいます。

しかしそれでは統一感がなくなる場合があるので、カラム内部に脚注がまとめて出るようにしたいです。

ひとまず、

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{multicol-footnote-imp}[2025/10/23, Version 1.0.1---under development]

% 内部用ストレージ
\newcommand\col@fn@list{}
\newcommand\col@fn@list@meta{}
\newcommand\col@fn@clear{%
\global\let\col@fn@list\@empty
\global\let\col@fn@list@meta\@empty
}

% カラム内脚注登録(マーク+蓄積)
\newcommand{\colfootnote}[1]{%
\refstepcounter{footnote}%
\textsuperscript{\thefootnote}%
\protected@xdef\col@fn@list{%
\unexpanded\expandafter{\col@fn@list}%
\noexpand\noindent
\noexpand\textsuperscript{\thefootnote}\space%
\unexpanded{#1}\noexpand\par
}%
}

% カラム末脚注出力
\newcommand{\printcolfootnotes}{%
\ifx\col@fn@list\@empty
\else
\par\bigskip
\footnoterule
\vspace{.5\baselineskip}
{\footnotesize
\parskip=0pt \parindent=1em
\col@fn@list
}%
\global\let\col@fn@list\@empty
\global\let\col@fn@list@meta\@empty
\fi
}

% multicols 環境用フック
\AtBeginEnvironment{multicols}{%
% 元の footnote を保持
\let\col@orig@footnote\footnote
\col@fn@clear
\renewcommand{\footnote}{\colfootnote}%
\pretocmd{\columnbreak}{\printcolfootnotes}{}{}%

% multicols 環境内で \mult@column@out が定義された後に一度だけ上書きする
\def\col@safe@hook@autobreak{%
\@ifundefined{mult@column@out}{}{%
\let\col@orig@mult@column@out\mult@column@out
\renewcommand{\mult@column@out}{%
\printcolfootnotes
\col@orig@mult@column@out
}%
}%
}%
% 最初の段落実行時にフックを差し込む
\everypar{%
\col@safe@hook@autobreak
\global\let\col@safe@hook@autobreak\relax
\everypar{}%
}%
}

\AtEndEnvironment{multicols}{%
\printcolfootnotes
\let\footnote\col@orig@footnote
\@ifundefined{col@orig@mult@column@out}{}{%
\let\mult@column@out\col@orig@mult@column@out
}%
\col@fn@clear
}


\endinput
こんな感じで組んでみたのですが、問題点が以下2点です。

1、multicolにおける自動改段に対してfootnoteの出力位置が呼応してくれない。
2、脚注が通常の段落と同じような扱いを受けるようにしてしまっているため、脚注が多すぎる場合次のページ上部に溢れてしまう。

これを解消する手段はありますでしょうか。基本はjlreqで使う想定ですが、できればltjsでも動いてくれる設計にしていきたいです。
KK TeX への返信

Re: multicolsの脚注をカラムごとに排出させたい

- Dora TeX の投稿
Dora TeX への返信

Re: multicolsの脚注をカラムごとに排出させたい

- 本田 知亮 の投稿
>multicolの実装の難しさについては、

ほんとに・・・人外大魔境というか,
存在が保証されているものを実際に構築することは難易度が半端ではないことが多い
ということの証拠というか・・・,さっぱり分かりません.

実際のところはmulticolを使わずに
ad hocなことをしつつtwocolumnを使う方が
まだましだと思います.twocolumnならフロートも脚注もいけます.
ページ途中からのtwocolumnと,
twocolumn後のページの追い込みを
力技でなんとかしてから,
徐々に抽象化してできるかぎり自動処理できるようにもっていくあたりが
落としどころかと.
あとは仕様(と制限)をどう定めるか.

twocolumnの実装そのものは比較的シンプルなので
twocolumnをthreecolumnとか一般のncolumnにするのは
簡単にとは絶対に言えないですけど
multicolの解析よりは手が届きそうです
(twocolumnベースのncolumn,できそうだと思いつつ
書いたことはないですけど ^-^; ,
段組みできても mark が最大の難関のような気がします).

---
インプレスから出てた
鷺谷さんのマクロ集(LaTeX2.09用だったと思う)
「日本語LaTeX定番スタイル集vol.1~3」(1992,3年あたり)
に似たようなものがあったはずなんですが・・・
買っといて保持しておけばよかったなとか
今更ときどき思います.
本田 知亮 への返信

Re: multicolsの脚注をカラムごとに排出させたい

- しっぽ 愛好家 の投稿

>twocolumnをthreecolumnとか一般のncolumnにするのは
>簡単にとは絶対に言えないですけど
>multicolの解析よりは手が届きそうです
>(twocolumnベースのncolumn,できそうだと思いつつ
>書いたことはないですけど ^-^; ,
>段組みできても mark が最大の難関のような気がします).

ええ,その方針では「比較的」容易にできますね.
# もちろん,multicol みたいに「ページの途中で段数を変更する」ような
# ことはできませんが(それをやる都合で,multicol では脚注・フロートは
# ページ幅のもののみにしているのでしょうけれども).
\mark についても,\splitfirstmark/\splitbotmark を調べて各段で
\mark が用いられているかどうかをチェックすれば柱の管理には支障がないはず.
# fixltx2e パッケージ(もしかしたら現行の LaTeX にも?)にそういうコードが
# あったはず.

しっぽ 愛好家 への返信

Re: multicolsの脚注をカラムごとに排出させたい

- KK TeX の投稿

想像より数段難しそうなので、時間をかけて解析してみようと思います.....。