.png)
Как исправить вертикальный интервал между текстом и строками? В следующем MWE вертикальный интервал между текстом и строкой под ним намного больше, чем вертикальный интервал между текстом и строкой над ним. Я хочу, чтобы эти два вертикальных интервала были равны, и я хочу иметь возможность задать значение этого вертикального интервала.
\documentclass[12pt]{report}
\begin{document}
\rule{6cm}{0.4pt}\par
\textbf{\large TITLE}\par
\rule{8cm}{0.4pt}
\end{document}
решение1
Линия рисуется на базовой линии текста. Следовательно, нижняя линия находится на базовой линии следующей строки текста.
Поэтому вам нужно поднять нижнюю линию на подходящую величину. Это можно сделать, \vspace
добавив глубину к \rule
.
\documentclass[12pt]{report}
\begin{document}
\rule{6cm}{0.4pt}Some\par
\textbf{\large TITLE}\par%\vspace{-0.66\baselineskip}
\rule[0.66\baselineskip]{8cm}{0.4pt}Some
\end{document}
решение2
Я разобрался с этой концепцией и у меня есть решение, которое довольно хорошо ее иллюстрирует:
Динамический подход (относительный размер шрифта)
Понимая, что после каждой новой строки рисование линии начинается с основания, где должна быть буква (базовая линия глифа), вы поднимаете строку ниже текста. Насколько? user11232 использует 60% от базовой линии пропуска. Другой способ — использовать высоту какой-нибудь заглавной буквы напрямую, например, это \fontcharht\font"004D
приведет к высоте буквы M в пунктах. Задается \baselineskip
классом thru \@setfontsize
, см.\baselineskip определяется автоматически?.
Если вас не устраивают оптические результаты, например, из-за ширины или глубины букв, вы можете даже сделать ее равной 70% от высоты заглавной буквы (просто добавьте .7
перед \fontcharht
).
Первоначальный подход
Нарисуйте линию над и под текстом и посмотрите, что получится. Результат не очень приятный с точки зрения оптики.
Полный код
\documentclass{article}
\usepackage{fontspec}% xelatex
% Note that you can remove all the \noindent occurrences
% with \setlength\parindent{0pt} which sets empty indent box
% to 0pt globally
\newcommand\linedatWRONG[1]{% comment out this line-ending
\leavevmode\par\noindent\rule{4cm}{0.4pt}gello\par\noindent%
#1\rule{1cm}{0.4pt}\par\noindent%
\rule{4cm}{0.4pt}gello\par%
}
\newcommand\linedatRIGHT[1]{% comment out this line-ending
\leavevmode\par\noindent\rule{4cm}{0.4pt}gello\par\noindent%
#1\rule{1cm}{0.4pt}\par\noindent%
\rule[\fontcharht\font`M]{4cm}{0.4pt}gello\par% raise line up by the height of M in the current font
}
\newdimen\Mheight % for demo only
\Mheight=\fontcharht\font`M% for demo only
\begin{document}
\noindent The \texttt{\textbackslash linedatWRONG} version does indeed have the correct
alignment according to TeX's rules of baseline skips. I used the word
{\char"201C}gello{\char"201D} to demonstrate that the lines are at the baselines.
\linedatWRONG{Hello gello}% purposely used glyph with depth "g"
\vspace{2\baselineskip}
\noindent In the \texttt{\textbackslash linedatRIGHT}, we raise the bottom line up by the height of an upper case {\char"201C}M{\char"201D}
in the current font, which happens to be \the\Mheight. Programming this dynamically ensures
that the value of M will be ajusted to the current scope's font.
\linedatRIGHT{Hello gello}% purposely used glyph with depth "g"
\end{document}
Примечания
- ПредостережениеЭто работает, когда пропуск базовой линии немного больше, чем глубина+высота символа. Если у вас особенно большой пропуск базовой линии, то поднятие нижней линии на глубину+высоту символа может показаться незначительным по сравнению с пропуском базовой линии.
- Класс article указывает, что размер шрифта 10pt (
\@xpt
) имеет связанный с ним\@xiipt
пропуск базовой линии 12pt ( ). - другой вариант — использовать глубину линии