
В идеале я хотел бы иметь возможность пропускать строки до и после \section
, до и после многих сред (теорема, пункт, перечисление и т. д.), между \item
s в списке, до и после math в стиле отображения и в нескольких других местах. Это помогает мне поддерживать порядок в исходном коде.
К сожалению для меня, Дональд Кнут решил, что пропущенная строка должна иметь семантическое значение в исходном коде. Я уверен, что у него были на то веские причины, но лично я был бы гораздо счастливее, если бы начало нового абзаца требовало команды \par
.
Я знаю, что общепринятым решением для организации кода является помещение %
символа в начало строк, пропущенных по несемантическим причинам;Однако я считаю, что эти дополнительные %
символы загромождают мой код и менее полезны, чем просто пропущенные строки.
Вопрос:
В каких местах (если таковые имеются) в обычном документе LaTeX можно пропустить одну или несколько строк, не влияя на вывод?Я понимаю, что ни одно место не может быть полностью безопасным, если разрешены переопределения, поэтому предположим, что используется один из стандартных или AMS-классов документов, что никакие дополнительные пакеты не загружены и что единственные определения в преамбуле определяют типы теорем.
Еще одно ограничение, чтобы отличить этот вопрос отКогда можно безопасно добавить пустую строку?:Предположим, я понятия не имею, как различные команды и окружение влияют на вертикальный режим.Если позволите, мой вопрос заключается в том, чтобы предоставить (не обязательно полный) список команд/сред, которые влияют на вертикальный режим таким образом, что пропущенная строка до и/или после не будет иметь никакого эффекта.
решение1
Ответ в связанном вопросе немного вводит в заблуждение, поскольку вертикальный режим — это техническая деталь реализации, которая не так тесно связана с поведением пользователя, как подразумевается. Например, вы находитесь в вертикальном режиме после списка, но latex прилагает много усилий, чтобы сделать пустую строку эффектной, чтобы поведение списка соответствовало поведению отображения математики (где вы находитесь в горизонтальном режиме после отображения).
Во-первых, поведение не встроено в TeX, оно зависит от текущих настроек catcode.
TeX удаляет все пробелы, включая системно-зависимый маркер конца строки из каждой строки (эта частьнетнастраиваемый) Затем он вставляет , \endlinechar
если задано. Обычно в LaTeX это ^M. Затем catcode \endlinechar
используется так же, как если бы это был обычный символ в файле. Обычно это catcode 5, который является специальным catcode, который заставляет один ^M действовать как пробел, а два ^M действовать как \par
(опуская некоторые детали). Но вместо этого вы можете сделать ^M с catcode 10, когда он будет действовать как пробел, или задать \endlinechar=32
тогда один пробел (и не конец строки) будет генерироваться в конце каждой строки.
\documentclass{article}
\begin{document}\endlinechar=32
One two three
four
five
\begin{itemize}
\item one
two \item
three
\end{itemize}
\end{document}
Однако если вы не хотите этого делать и сохраняете стандартные настройки, правило должно быть действительно простым: используйте пустую строку там, где вы хотите закончить текущий абзац.
Так что пустые строки - этоошибкав математическом режиме.
Пустые строки создают маркер конца абзаца \par в вертикальном режиме (режим par) (но поскольку a \par
игнорируется в начале вертикального списка, допустимо иметь пустую строку в начале и т. д. \parbox
, minipage
а также после каждого абзаца,
Вам следуетникогдапоместите пустую строку перед отображаемой математикой (TeX считает, что отображаемая математика всегда должна находиться внутри абзаца, а не между абзацами, поэтому, если вы используете пустую строку перед ней \[
или что-либо еще, что используется $$
внутри, то TeX вставит код, эквивалентный \indent$$
действию восстановления, и вы получите ложную белую строку, состоящую из отступа, но без текста, что выглядит как ложный вертикальный пробел перед отображением.
Вам следует вставлять пустую строку после отображаемой математической среды или нет, в зависимости от того, является ли следующий текст новым абзацем или продолжением абзаца, предшествующего отображению.
Если вы поместите пустую строку перед или после окружения списка латекса, то текст, следующий за окружением, начнет новый абзац и, как правило, будет иметь отступ. Если вы не поместите пустую строку перед или после списка, то следующий текст будет считаться продолжением абзаца, предшествующего списку.
Почти все латексные конструкции располагаются так же, как и буква X
. Люди часто спрашивают, как заставить включенные изображения идти рядом или одно над другим. Ответ такой X
:
X X
Ставит два X рядом
X
X
помещает X
один над другим в отдельных абзацах. Вы можете заменить X
на \includegraphics
или \fbox
или \parbox
или \begin{tabular}...\end{tabular}
и то же взаимодействие с пустой строкой применяется.
решение2
Я научился организовывать свои источники, разделяя строки после фраз, т. е. после знаков препинания. Таким образом, большая часть редактирования превращается в перестановку строк, текстовые редакторы обычно хорошо поддерживают это. В качестве дополнительного бонуса, системы контроля версий также работают на основе измененных строк, так что это хорошее соответствие (например, добавление слова не приводит к дюжине изменений из-за повторного заполнения абзацев; изменения легко заметить). Сохранение, например, статей и связанных вместе делает ошибки, такие как собака или ошибка, легко заметными (наш поиск).
Я пишу уравнения в основном одинаково, выстраивая равенства (если их несколько), разбивая и делая отступы для длинных членов, если встречаются длинные множители, снова делаю отступы и т. д.
Подводя итог, я стремлюсь сохранять отступы в исходном тексте так же, как вы бы делали отступы в программе с очень узкими полями (LaTeX гораздо более многословен, чем математические выражения, написанные, например, на C). Только очень редко естественные пробелы в исходном тексте создают нежелательные разрывы абзацев, иногда строку приходится заканчивать знаком % для логического разделения, которое не приводит к нежелательным пробелам.
В любом случае, это исходный код. Он предназначен для чтения людьми, а не только автором. Все нестандартное затрудняет чтение документа, усложняет его повторное использование или интеграцию с другими текстами и практически делает невозможным обмен с другими.