VScode住人の探検記

Visual Studio Codeでなんでもこなすのがポリシー。LaTeX(2020/7/19~), C(2021/1/25~), C#(2/4~), HTML&CSS(2/14~), Python(2/16~), JavaScript(2/28~), jQuery(3/18~), Sass(Scss)(3/20~),シェルスクリプト(3/21~), jCanvas(5/21~), WordPress(5/23~), PHP(5/31~)

Dimention too large対策【minipage環境でTeXを騙せ】

xymatrixを使用していると、しょっちゅうdimention too largeエラー地獄に陥る。
最終的なエラーメッセージの少し上には、
Overfull \vbox (数字pt too high) has occurred while \output is active
という記述がある。
数字の部分は場合によって異なるらしく、10未満であれば

\setlength\headheight{10pt}

をプリアンブルに加えることで改善するらしい。
私が直面したエラーでは約15000だったため、ダメもとで\setlength\headheight{16000pt}と書き加えてみたが、まあそりゃ無理である。
ちなみに\setlength\headheight{16000pt}と加えてタイプセットしたときに出たエラーは
! Huge page cannot be shipped out.(直訳:巨大なページは出荷できません。)
…そりゃそうよね。
そんなわけで別な解決策を探した結果、次のようにしたらうまくいった。

❂ ❃ ❅ ❆ ❈ ❉ ❊ ❋ ❂ ❃ ❅ ❆ ❈ ❉ ❊ ❋
まず、\end{document}を少し上の行に移動させて、\end{document}より下にテキストがある状態でタイプセットしてみる。
正常にコンパイルされるまで、\end{document}を少し上に移動→タイプセットを繰り返す。(dimension too large以外のエラーは無視して続行)
正常にコンパイルされるときが来たら、そのときの\end{document}の直後にある部分がエラーの原因である。

エラー箇所を特定できたら、

\begin{minipage}[t]{40zw}
エラー部分(とその前後、1ページに収まる長さで)
\end{minipage}

とエラー部分を囲んで、\end{document}を一番下の行に戻してタイプセットする。

❂ ❃ ❅ ❆ ❈ ❉ ❊ ❋ ❂ ❃ ❅ ❆ ❈ ❉ ❊ ❋

難しい話はよくわからないが、この方法はエラー部分を含む段落を巨大な1文字と認識させることで、エラー部分に気づかせないようにする手法らしいな(素人の信用ならない意訳)
40zwは、その巨大な1文字の横幅である。1zwは平仮名1文字の横幅で、デフォルトでは1行に40文字並ぶため、40zwと設定した。この値を小さくすれば、ページの右端に着く前に改行されることになる。
tはtopの略で、この巨大な1文字を\begin{minipage}の直前の行のすぐ次の行に配置することを意味する。cにすれば余白の真ん中の行、bにすればページの一番下の行に沿って配置されることになるのだろう。つまり、cやbにすれば直前の行との余白が空く。普通に横書きで上の行から順に書いている状態なら、tにしておけば自然な見栄えになるはずだ。

参考にしたウェブサイトはこちら。このブログは精一杯意訳した結果なので、説明不足・解釈違いは本家を見て補ってほしい。
7.6 ボックス