Вертикальная вставка пространства в различных контекстах

Вертикальная вставка пространства в различных контекстах

Это мой первый пост, надеюсь, он не слишком избыточный по сравнению с существующим материалом. Использовав Latex некоторое время, но всегда с очень утилитарным подходом, я всегда путаюсь с командой \vspace, которую нахожу несколько контринтуитивной.

В следующем минимальном примере я ищу команды для ручного добавления белых вертикальных пробелов (да, я знаю, что это некрасиво!) в различных местах, указанных закомментированными макросами «skipspace».

\documentclass[a4paper,11pt]{article}
\newlength{\addspace}
\setlength{\addspace}{0mm} % play easily on the inserted length
\begin{document}

First paragraph~: starts off with some very interesting text,
until we encounter a first equation~:
%\skipspace1{\addspace}
$$
x=5,
$$
%\skipspace2{\addspace}
after what the paragraph continues, with some even more interesting
text, and finally ends with another equation~:
$$
x=5.
$$
%\skipspace3{\addspace}

Second paragraph~: we are going to encounter a line break
(don't ask why I like to have these from time to time).\\
%\skipspace4{\addspace}
This is the same paragraph continuing after the break.
%\skipspace5{\addspace}

Third paragraph~: whatever. As far as I'm concerned, the example is over,
but multiple-line paragraphs definitely look better.
\end{document}

Насколько я могу судить по моему опыту, позиции "1" и "5" хорошо обрабатываются \vspace, тогда как позиции "2", "3" и "4" требуют некоторой настройки каждый раз (потому что \vspace не работает интуитивно в начале новой строки). На данный момент я использую уродливый хак, основанный на строке с одним пробелом:

Для случаев 2 и 4 работает следующее:

\ \vspace{\addspace}\\[-\baselineskip]

Для случая 3 работает следующее:

\ \vspace{\addspace}\\[-2\baselineskip]

Теперь мой вопрос: есть ли общий макрос (красивее, чем мой хак), который будет совместно обрабатывать случаи «2», «3» и «4»? Или, что еще лучше (просто мечта), есть ли общий макрос, который мог бы напрямую обрабатывать все 5 случаев?

Заранее спасибо за ваше время и объяснения.

Говард

EDIT: Вы можете найти мой собственный ответ ниже, благодаря ответу Дэвида Карлайла

решение1

Если \vspaceиспользуется в вертикальном режиме, то в этой точке добавляется пробел. Если он добавляется в горизонтальном режиме, то он откладывается до тех пор, пока абзац не будет разбит на строки, а затем пробел добавляется после строки, содержащей узел, несущий отложенный пробел.

Поведение в горизонтальном режиме в некоторой степени оправдано, но редко требуется, поэтому простое правило — всегда оставлять пустую строку перед \vspace.

Другое правило, на которое следует обратить внимание, заключается в том, что никогда не следует оставлять пустую строку перед отображаемой математикой (которая не должна быть отмечена значком $$в латексе, но то же самое относится и к \[).


\ \vspace{\addspace}\\[-2\baselineskip]

очень странная конструкция: если используется в вертикальном режиме, он начнет абзац с отступа абзаца, затем принудительный пробел между словами, \затем принудительный разрыв. \\Если пустая строка следует за строкой после разрыва, она будет пустой и сгенерирует предупреждение о неполном заполнении hbox. Затем абзац закончится, поэтому \addspaceбудет добавлен после первой белой строки. Таким образом, вы сгенерируете два белых hbox, которые не отбрасываются при разрыве страницы и имеют \addspace - 2\baselineskipпробел между ними. Это будет похоже на пробел, \addspaceно взаимодействие с текстом выше и ниже будет другим, а поведение при разрыве страницы будет совершенно неправильным, допуская разрыв страницы между двумя белыми строками и создавая аномальную белую строку в верхней части следующей страницы.

решение2

Благодаря ответу Дэвида Карлайла я понял, что "Случай 3" (вставка пробела между уравнением и следующим абзацем) также легко выполняется с помощью \vspace, за исключением того, что вам нужно вставить его между двумя пустыми строками. Так что, если я резюмирую свое текущее решение, оно выглядит так~:

\documentclass[a4paper,11pt]{article}
\newlength{\addspace}
\setlength{\addspace}{0mm} % play easily on the inserted length

\newcommand{\myvspace}[1]{\ \vspace{#1}\\[-baselineskip]} % home-made ugly macro

\begin{document}

First paragraph~: starts off with some very interesting text,
until we encounter a first equation~:
\vspace{\addspace} % CASE 1
\[
x=5,
\]
\myvspace{\addspace} % CASE 2
after what the paragraph continues, with some even more interesting
text, and finally ends with another equation~:
\[
x=5.
\]

\vspace{\addspace} % CASE 3... blank lines above and below are important to enter vertical mode

Second paragraph~: we are going to encounter a line break
(don't ask why I like to have these from time to time).\\
\myvspace{\addspace} % CASE 4
This is the same paragraph continuing after the break.

\vspace{\addspace} % CASE 5

Third paragraph~: whatever.
\end{document}

Так что, похоже, я могу делать все, что захочу, с \vspace (для случаев 1,3,5) и моим уродливым самодельным макросом \myvspace (для случаев 2 и 4)... и это более или менее нормально. Спасибо всем, и особенно Дэвиду за то, что указал мне на разницу между горизонтальным и вертикальным режимом.

Говард

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