Динамический подход (относительный размер шрифта)

Динамический подход (относительный размер шрифта)

Как исправить вертикальный интервал между текстом и строками? В следующем 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 ( ).
  • другой вариант — использовать глубину линии

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