Оглавление

Оглавление

Когда я бегу

\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, !за которым следует пробел; используется просто для обозначения пробела, поскольку в противном случае он здесь не виден). (Кстати, это на самом деле не документировано вTeXbook—Я думаю, Кнут не хотел указывать детали взаимодействия с пользователем и ожидал, что они изменятся с реализацией TeX, — но см. примеры в главах 6 и 27, а такжеЧасть 6 «Сообщение об ошибках» §73 вTeX: Программа.)

  • Когда TeX вынужден набирать переполненный блок, он выводит диагностическое сообщение, показывающее переполненный блок. (Аналогично с тесными блоками и т. д.) Это диагностическое сообщение может содержать такие вещи, как !, в зависимости от символов, которые встречаются внутри блока, и используемых шрифтов.

  • TeX по умолчанию переносит строки вывода на ширину max_print_line. В этом случае, похоже, ваша среда TeX настроена на перенос строк вывода ошибок ровно на 120 символов, в результате чего одна из строк (по совпадению) начинается с !. Вы можете изменить этот перенос строккак описано в другом ответе, или просто вызвав TeX с большим значением max_print_lineв среде оболочки, например 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до say 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шрифт:

ОТ1

а это 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 :— обратите внимание, что даже если мы находимся в математическом режиме, :берется из шрифта OT1 cmr, поскольку он должен быть вертикальным и т. д.
  • \OML/cmm/m/it/10 A[]— нижний индекс aa— это отдельный блок (я думаю), и здесь он просто отображается как[]
  • \OMS/cmsy/m/n/10 !— обратите внимание, что !(символ 33) в OMS/cmsy/m/n— это символ. В движках TeX, не поддерживающих Unicode (в основном 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 , мне удалось получить немного более структурированный вывод для строки:здесь. Это слишком многословно для типичного использования, но интерактивная система могла бы расширять/отображать, показывая реальные глифы из шрифтов вместо запутанных вещей вроде !и т. д.)

Связанный контент