[plext パッケージ] \layoutcaption,\pcaption の変更予定について

[plext パッケージ] \layoutcaption,\pcaption の変更予定について

- aminophen の投稿
返信数: 1
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 の記述にマッチするようになります。
aminophen への返信

pLaTeX / upLaTeX リリース 2018-12-01

- aminophen の投稿
本日 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}