走るとき
\documentclass{article}
\begin{document}
Aaaaaa aaaaa aajcaaaaaa $a:A_{aa}\to a_a$a$\ge$ aaaaaaaaaaaaaaaaaaaaaa
$a_a\dots\to$
\end{document}
ビルド出力には次の行が含まれます。
LaTeX-Result: 1 Error(s), 0 Warning(s), 1 Bad Box(es), 1 Page(s)
[次のエラー] をクリックすると、ビルド出力で次の段落の ! で始まる行が示されます。
Overfull \hbox (1.65294pt too wide) in paragraph at lines 3--4
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10
! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 $ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[
] [] \OMS/cmsy/m/n/10 !$
[]
このエラーを調べてみると、フォントでも同様のエラーが表示されますが、エラー コードが若干異なります。
私の推測では、これは末尾の $\to$ がオーバーフローしていることと関係があると思われますが、それだけではありません。なぜなら、不良ボックスの大きさを変えずに一部の文字を移動することでエラーを除去できるからです。
このエラーの原因は何か教えていただけますか?
更新: コメントの1つによると、使用されているプログラムによって異なる可能性があります。このエラーはTeXnicCenterの両方で発生し、このエラーコードはラテックスベースただし、エラーとしては報告されません。
答え1
短い回答: これは警告ですが、エディター (TeXnicCenter) がこれをエラーと勘違いしています。 詳しい回答は以下をご覧ください。
(前回の質問「1文字入力しただけで意味不明なエラーが発生」これについてはすでに説明されていますが、さらに詳しく説明する価値があると感じたので、もう一度試してみます。
目次
- 出力がエラーとして扱われる理由 (およびそれを修正する方法)
- この出力を消す方法(警告を修正する)
- 出力の意味
1. 出力がエラーとして扱われる理由
ここでは、エディターを混乱させる 3 つの要因が共謀しています。
TeXはエラーメッセージを新しい行に出力します。その行は
!␣
(a!
の後にスペースが続きます。␣
スペースを示すために を使用しています。そうでなければここでは見えません)。(ちなみに、これは実際には文書化されていません。TeXbook について—クヌースはユーザーインタラクションの詳細を規定したくなかったと思うし、TeXの実装によってそれが変わることを期待していたと思うが、第6章と第27章の例を見てください。また、第6部「エラーの報告」§73 でTeX: プログラム。TeX がオーバーフル ボックスを強制的にタイプセットする場合、オーバーフルだったボックスを示す診断が出力されます。(タイト ボックスなどの場合も同様です) この診断には、
!
ボックス内の文字と使用されているフォントに応じて、 などの内容が含まれることがあります。TeXはデフォルトで出力行を幅 に折り返します
max_print_line
。この場合、TeX環境はエラー出力行をちょうど120文字で折り返すように設定されているようです。その結果、行の1つが(偶然にも) で始まっています!
。この行折り返しを変更することができます。他の回答で述べたようにmax_print_line
、または、シェル環境でのより大きな値を使用して TeX を呼び出すだけです (max_print_line=1000 pdflatex ...
)。
これらの要因の組み合わせにより、ボックスがいっぱいになったという診断が印刷され、120 文字に折り返され、エディターによって誤ってエラーとして解釈されます。
行折り返し幅を大きくすると (例max_print_line=10000
)、この混乱を避けて、代わりに次のような出力が得られ、オーバーフル ボックス全体が 1 行に表示されます ( で始まる行はありません!
)。
Overfull \hbox (1.65294pt too wide) in paragraph at lines 3--5
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10 ! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 ^^U$ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[] [] \OMS/cmsy/m/n/10 !$
2. 出力を消す方法
出力 (警告) は、オーバーフル ボックスに関するもので、つまり、線が本来よりも少しはみ出していることを意味します。どのくらいはみ出ているのでしょうか? 近くにテキストの段落を追加することで、視覚的に確認できます。
矢印が上のテキストの行よりも突き出ているのがわかりますか? おそらく次のようになります:
いっぱいになったボックスに対処するためのオプションは、それを無視するか、さらに伸ばすか、さらに区切りをつけるか、またはテキストを書き直すかです (必要な労力の増加順、見た目の美しさの減少順)。
この場合、ご覧のとおり、それほど大きくオーバーしているわけではありません (警告メッセージには 1.65 pt と表示されています)。したがって、見た目に違和感がなければ、無視するのが最善策かもしれません。( またはそれ以上の値\hfuzz
に増やすことで、警告が表示されないようにすることができます1.66pt
。)
そうでなければ、(数式があり、数式の中に改行を入れるのはよくないかもしれないので)テキストを書き直すのが最善のアプローチかもしれません。面倒なことをしたくない場合は、\sloppy
(参照)を設定するだけで済みます。この答え具体的に何を\sloppy
するかについては、 または を増やすことで\emergencystretch
、TeX がデフォルトで許容する範囲よりも少しだけ長くして改行することができます。
(文書内の他の段落に影響を与えないようにするには、グループ化を使用して、 \sloppy
and/orの変更を\emergencystretch
この段落だけに制限することができます。{ … }
たとえば、LaTeX はsloppypar
まさにこれを実行する環境を提供します。)
3. 出力の意味
残る疑問はなぜオーバーフルボックス診断は次のようになります: この出力は何を意味するのでしょうか?
これは基本的に、グルーやさまざまなフォントの文字など、TeX がその行に置いたすべてのもののリストです。さまざまなフォントを含む行では、出力の多くがフォントに関するものになることがあります。
パッケージを使用するfonttable
と、
\xfonttable{OT1}{cmr}{m}{n}
\xfonttable{OML}{cmm}{m}{it}
\xfonttable{OMS}{cmsy}{m}{n}
出力行に表示されたフォントをより詳細に理解します。OT1/cmr/m/n
フォントは次のとおりです。
そしてこれはOML/cmm/m/it
:
そしてこれはOMS/cmsy/m/n
:
ログ行にOverfull \hbox
、タイプセットされたオーバーフルhboxが何であったかが印刷されると、
として
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10 ! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 ^^U$ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[] [] \OMS/cmsy/m/n/10 !$
次のように部分に分割できます。
[]
— これは親接着剤です\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $
— これは単にフォントで「Aaaaaa aaaaa aajcaaaaaa」を意味しOT1/cmr/m/n/10
(上記参照)、 に示すように任意の区切り(潜在的なハイフネーションポイント)がありaaaaa aa-j-caaaaaa
、その後に数式モードが始まります。\OML/cmm/m/it/10 a
\OT1/cmr/m/n/10 :
— 数式モードであるにもかかわらず、 は:
OT1cmr
フォントから取得されることに注意してください。これは、縦書きである必要があるためです。\OML/cmm/m/it/10 A[]
— 下付き文字aa
は独自のボックス(だと思う)であり、ここでは単に次のように表示されます。[]
\OMS/cmsy/m/n/10 !
!
— の(文字 33) が文字でOMS/cmsy/m/n
あることに注意してください→
。非 Unicode TeX エンジン (XeTeX や LuaTeX ではなく、基本的に pdfTeX) では、フォントは最大 256 個のグリフを持つことができるため、 のような文字は→
0 ~ 255 の位置にマッピングする必要があります。\OML/cmm/m/it/10 a[]$
— ここでも下付き文字a
は単に[]
\OT1/cmr/m/n/10 a$
\OMS/cmsy/m/n/10 ^^U$
— ここで、^^U
は文字21を表します(U
ASCII 85で、TeXでは^^
64を加算または減算することを意味するため)。このフォントの文字21は≥
\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $
\OML/cmm/m/it/10 a[] []
\OMS/cmsy/m/n/10 !$
—!
ここでも、→
(明らかに、これらのオーバーフル ボックスの表示方法の出力は、TeX が開発された当時 (~1980) には適しており、マニュアルを注意深く読んだ人にとっては便利ですが、今日では、出力に色を付ける、文字を Unicode に変換する、フォント情報を抑制/切り替えるなどのオプションを追加するなど、さらに改善できる可能性がありますが、残念ながら、TeX のこのような改善についてはあまり作業が行われていません。LuaTeX とを使用してpost_linebreak_filter
、次の行に対してもう少し構造化された出力を取得できました。こここれは一般的な用途には冗長すぎますが、対話型システムでは expand/display を使用すれば、 などのわかりにくいものの代わりにフォントの実際のグリフを表示できます!
。