目錄

目錄

當我跑步時

\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$ 溢出有關,但這還不是全部,因為我可以移動一些字母而不改變壞盒子的大小來消除錯誤。

有人能告訴我這個錯誤的原因是什麼嗎?

更新:根據評論之一,這可能取決於正在使用的程式。我在 TeXnicCenter 上都遇到此錯誤,並且此錯誤代碼也出現在Latexbase.com但它不會被報告為錯誤。

答案1

簡短回答:這是一個警告,但您的編輯器 (TeXnicCenter) 將其誤認為是錯誤。更長的答案如下。


(之前的一個問題“輸入字母後出現無法理解的錯誤”涵蓋了這一點,但我覺得值得更詳細地討論,所以再拍一次。

目錄

  1. 為什麼輸出被視為錯誤(以及如何解決該問題)
  2. 如何使此輸出消失(修復警告)
  3. 輸出的含義是什麼

1. 為什麼輸出被視為錯誤

這裡有三件事正在密謀讓你的編輯感到困惑:

  • TeX 在新行上列印錯誤訊息,以!␣(a!後面跟著一個空格;僅用於表示空格,否則此處不可見)。 (順便說一句,這實際上並沒有記錄在教材—我認為 Knuth 不想指定使用者互動的細節,並希望它們隨著 TeX 實作而改變 — 但請參閱第 6 章和第 27 章中的範例,以及第 6 部分「報告錯誤」§73 在TeX:程式.)

  • 當 TeX 被迫排版過滿的盒子時,它會列印出診斷訊息,顯示盒子已滿。 (與緊密框等類似)此診斷可以包含類似 的內容!,取決於框內出現的字元和使用的字體。

  • TeX 預設將輸出行換行為 width max_print_line。在這種情況下,您的 TeX 環境似乎已設定為將錯誤輸出行包裝在 120 個字元處,因此其中一行(碰巧)以!.您可以變更此換行正如另一個答案中所描述的max_print_line,或透過在 shell 環境中簡單地呼叫具有更大值的 TeX ,如max_print_line=1000 pdflatex ...)。

綜合這些因素,我們列印了一個過滿的盒子診斷,包裝為 120 個字符,並被您的編輯錯誤地解釋為錯誤。

如果增加換行寬度(例如max_print_line=10000),您將避免這種混亂,並得到像這樣的輸出,滿溢的方塊完全顯示在一行上(並且沒有以 開頭的行!):

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和/或\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字體:

OT1

這是OML/cmm/m/it

奧米拉

這是OMS/cmsy/m/n

有機管理系統

因此,在Overfull \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) inOMS/cmsy/m/n字元。在非 Unicode TeX 引擎(基本上是 pdfTeX,而不是 XeTeX 或 LuaTeX)中,字體最多可以有 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,我能夠獲得更結構化的輸出:這裡。這對於典型用途來說太冗長了,但是互動式系統可以展開/顯示,顯示字體中的實際字形,而不是像 等令人困惑的東西!

相關內容