
Мне бы хотелось нарисовать hrule
и иметь точный контроль над вертикальным пространством между линией и базовой линией текста под линией.
На следующем изображении видно, что расстояние между линейкой и базовой линией в трех случаях не одинаково.
Как мне этого добиться?
Вот пример MWE, демонстрирующий эту проблему.
\documentclass{article}
% see: https://tex.stackexchange.com/a/432196/8323
\newsavebox\textbox
\newcommand\showbaseline[1]{%
\leavevmode
\sbox\textbox{#1}%
\rlap{\rule{\wd\textbox}{.1pt}}%
\usebox\textbox
}
\begin{document}
\hrule
\showbaseline{A new line}
\vspace{1cm}
\hrule
\showbaseline{a new way}
\end{document}
решение1
Все просто: TeX не добавляет вертикального интервала между \hrule
тегом и следующим блоком (который может быть первой строкой абзаца, как в вашем примере).
Точнее, после \hrule
(что является вертикальной командой) TeX устанавливает \prevdepth
значение -1000pt
.
Если предположить, что следующая строка не выше обычной, то достаточно будет добавить \prevdepth=0pt
после .\hrule
\documentclass{article}
\newcommand{\test}[1]{%
\makebox[0pt][l]{%
\vtop{\hsize=5cm\parindent=0pt
\hrule\prevdepth=0pt
\makebox[0pt][l]{\vrule width 5cm height 0pt depth 0.1pt}#1
}%
}%
}
\begin{document}
\test{Généralités}
\medskip
\test{Électricité}
\medskip
\test{Optique}
\bigskip
%%% superimposed
\test{Généralités}%
\test{Électricité}%
\test{Optique}
\end{document}