https://github.com/texjporg/platex/issues/76
で検討を始めているのですが,plext パッケージで提供されている \pcaption コマンドにバグがある
らしいことを発見しました。次回リリースでこのバグを修正予定ですが,これに伴って挙動(仕様?)が
変化しますので,事前にここに書いておきます。
何か気になる点があれば返信ください。
「plext の \pcaption をそもそも知らない」という方にはほとんど関係ないかもしれません。
====
plext パッケージの \pcaption について知らない方のために簡単に説明しておきます。
・図表などフロートを \layoutfloat で配置して,
・(必要ならば,キャプションの位置を \layoutcaption でカスタマイズして,)
・\pcaption で実際のキャプションを付ける
という使い方です。これらの命令に言及がある書籍は,私が知っている限りでは
・「LaTeX2ε辞典 増補改訂版」(吉永さんの本,2018)
・「日本語 LaTeX2e ブック」(アスキー,1996,絶版?)
くらいですが,結構便利な命令だと思っています。
====
さて本題に戻ると,今回見つかったバグは下記のとおりです。
【バグと思われる現象】
下記の二条件を満たすとき,(例えキャプションの幅を \layoutcaption(20zw) などと指定しようとも,)
必ずキャプションが二行(場合によっては三行)に折り返されてしまう。
・条件1:本文が縦組でキャプションは横組にする
※ 縦組で使うと,デフォルトで勝手にそうなる。
・条件2:キャプションの文字列が比較的短い
※ 具体的には,
(折り返さず一行で組んだ長さの半分) < (\layoutcaption により許された幅)
という式が成り立つとき。
別の言い方をすれば,
「本文が縦組で,キャプションを横組にするときは,どんなに短いキャプションでも,幅を増やして一行に収めることができない」
となります。
【変更を予定している内容】
下記の2点です。
・変更点1:本文が縦組の時,キャプションの組方向のデフォルトを縦組にする。これは仕様変更にあたります。
(要するに,新仕様ではキャプションは常に本文と同じ組方向となります。)
・変更点2:上記のバグと思われる現象を修正し,キャプションの幅指定が正常に効くようにする。
【例1】
本文を縦組で figure のキャプションを「右」(=物理的な見た目では下)に横組で置くことを考えます。
現行の plext では,キャプションの幅をフロートオブジェクトの「高さ」(=物理的には横幅)に指定しようとしても,
なぜか無視されてそれより狭い幅になります。
\documentclass{tarticle}
\usepackage{plext}
\begin{document}
\begin{figure}
\layoutfloat(180pt,300pt){一応,図です一応,図です一応,図です}
\layoutcaption<y>(\floatheight)[cr]
\pcaption{短めのキャプション}
\end{figure}
\end{document}
この例ではキャプションが 300pt の幅で組まれることを期待しますが,実際の出力を見ると
図1 短めの
キャプション
というように二行に分割されます。
【例1の原因→対策】
内部処理で「キャプションを仮に一行で組んだとすると,その箱はどのくらいの寸法になるのか」を測定しようと
している箇所がありますが,「箱の高さ」だけ測って「深さ」を忘れていることが原因でした。
今回の「本文が縦組で,キャプションが横組」の場合,
(高さ)+(深さ)=(高さ)*2
になるので,「深さ」を忘れると本来あるべき寸法の半分しか取得できません。この結果として,キャプションが
勝手に二行に分割されてしまった,ということのようです。そこで,\make@pcaptionbox の
\if@tempswa \@tempdima\ht0 \else\@tempdima\wd0 \fi
の部分を
\if@tempswa \@tempdima\ht0 \advance\@tempdima\dp0 \else\@tempdima\wd0 \fi
に変更することにします。これが変更点1です。
【例2】
ところが,深さを考慮に入れると
「キャプションの幅が今までの倍になる」
わけですから,キャプションが少々長かった場合に違和感が増大します。
\begin{figure}
\layoutfloat(180pt,30pt){一応,図です一応,図です一応,図です}
\pcaption{とても長いキャプション---サブタイトルまで}
\end{figure}
この例はデフォルト設定ですが,小さな図に対して,左横にキャプションがびよーんと伸びたアンバランスな感じになります。
【例2の原因→対策】
このアンバランスは,そもそもキャプションが横組でなく縦組ならば起きないので,\DeclareLayoutCaption の設定値を
横組 (y) から周囲と同じ (n) に修正します。これが変更点1です。
【ドキュメントとの整合性】
変更点1は仕様変更にあたると思います。実際,私が見た書籍「LaTeX2ε辞典 増補改訂版」「日本語 LaTeX2e ブック」には,
現行の plext の実装通り,いずれも「横組 (y) がデフォルト」との記載がありました。しかし,plext そのものの添付文書 (pldoc.pdf) には
「本文の組方向と同じ (n) がデフォルト」との記述があります。今回の変更は y → n に変えることなので,書籍とは矛盾しますが
pldoc.pdf の記述にマッチするようになります。
本日 platex と uplatex をリリースしました。
> [plext パッケージ] \layoutcaption,\pcaption の変更予定について
> 2018年 09月 24日(月曜日) 15:12 - aminophen の投稿
で書いたとおりの仕様変更とバグ修正が入ります。
添付は pLaTeX ニュースの PDF 版 (plnewsc12.pdf) です。
======
なお,本家 LaTeX の新しいバージョン (LaTeX2e 2018-12-01) が,おそらく今日リリースされると思われます。
この新しいバージョンでは,例えば下記ソースの処理結果が現行版 (LaTeX2e 2018-04-01) と比べて変化します。
# 参考: https://github.com/latex3/latex2e/issues/73
# 従来は目次の中に不可解な空白が入っていましたが,新版ではこれらの空白が入らなくなります。
% コマンドは latex, pdflatex, platex, uplatex のどれを使っても同様
\documentclass{article}
\setcounter{tocdepth}{2}
\makeatletter
\renewcommand\l@subsection{\noindent}
\begin{document}
\tableofcontents
\section{xx}
\subsection{a}
\subsection{a}
\subsubsection{b}
\subsubsection{b}
\subsubsection{b}
\subsubsection{b}
\subsection{a}
\end{document}
> [plext パッケージ] \layoutcaption,\pcaption の変更予定について
> 2018年 09月 24日(月曜日) 15:12 - aminophen の投稿
で書いたとおりの仕様変更とバグ修正が入ります。
添付は pLaTeX ニュースの PDF 版 (plnewsc12.pdf) です。
======
なお,本家 LaTeX の新しいバージョン (LaTeX2e 2018-12-01) が,おそらく今日リリースされると思われます。
この新しいバージョンでは,例えば下記ソースの処理結果が現行版 (LaTeX2e 2018-04-01) と比べて変化します。
# 参考: https://github.com/latex3/latex2e/issues/73
# 従来は目次の中に不可解な空白が入っていましたが,新版ではこれらの空白が入らなくなります。
% コマンドは latex, pdflatex, platex, uplatex のどれを使っても同様
\documentclass{article}
\setcounter{tocdepth}{2}
\makeatletter
\renewcommand\l@subsection{\noindent}
\begin{document}
\tableofcontents
\section{xx}
\subsection{a}
\subsection{a}
\subsubsection{b}
\subsubsection{b}
\subsubsection{b}
\subsubsection{b}
\subsection{a}
\end{document}