Это мой первый пост, надеюсь, он не слишком избыточный по сравнению с существующим материалом. Использовав 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)... и это более или менее нормально. Спасибо всем, и особенно Дэвиду за то, что указал мне на разницу между горизонтальным и вертикальным режимом.
Говард