Вертикальное выравнивание текстовых фраз разного размера шрифта

Вертикальное выравнивание текстовых фраз разного размера шрифта

(В пунктах 2 и 3 «строка 001», «строка 002» и т. д. слева указаны только для того, чтобы показать, что базовые линии строк справа имеют вертикальные расстояния, кратные \baselineskipобычному шрифту нормального размера.)

  1. Какой наилучший/наименее громоздкий способ обеспечить выравнивание фраз, набранных двумя разными размерами шрифта, таким образом, чтобы линии, ограничивающие верхние выносные элементы букв большего шрифта, находились на высоте линий, ограничивающих верхние выносные элементы меньшего шрифта, как показано на следующем рисунке?

    введите описание изображения здесь

  2. Какой наилучший/наименее громоздкий способ гарантировать, что вертикальное склеивание между базовыми линиями двух строк текста, например, в конце абзаца, всегда будет кратным целому числу \baselineskip, даже если фразы имеют разный размер шрифта?

    введите описание изображения здесь

  3. Какой наилучший/наименее громоздкий способ гарантировать, что вертикальная склейка между базовыми линиями двух строк текста, например, в конце абзаца, всегда будет кратна целому числу \baselineskip, даже если фразы набраны шрифтом разного размера, а фразы, набранные шрифтом двух разных размеров, выровнены таким образом, чтобы линии, ограничивающие верхние выносные элементы букв большего шрифта, находились на той же высоте, что и линии, ограничивающие верхние выносные элементы меньшего шрифта?

    введите описание изображения здесь

Я нашел только громоздкие способы достижения таких вещей, где "ручная настройка" и странные примитивные инструкции должны быть записаны непосредственно в файл, содержащий текст документа. Я пока не нашел способов реализации методов для достижения таких вещей, как макросы, которые могли бы быть предоставлены в виде отдельного частного пакета, где использование этих методов/макросов также не было бы громоздким. Я хотел бы научиться писать код LaTeX, чтобы LaTeX делал такие вещи автоматически во время обработки файла, содержащего текст документа, - без необходимости перемежать фактические тексты моих документов тоннами странных инструкций для переключения режима набора из горизонтального режима в ограниченный горизонтальный режим или вертикальный режим или для создания и измерения рамок или для отмены некоторых \lineskipс \vboxes/ \vtops высоты/глубины, которая превышает \baselineskipтак, чтобы вертикальное расстояние до последующих строк было ниже \lineskiplimit, ...

Как и в случае с TeX⁠ ⁠-⁠ ⁠LaTeX Stack Exchange, требование полных минимальных воспроизводимых примеров является рефлексом даже в ситуациях, когда речь идет не об исправлении кода, а о запросе лучшей практики, в то время как код того, кто должен спрашивать о лучшей практике, скорее всего, не будет демонстрировать лучшую практику, я показываю, что я сделал до сих пор. Я надеюсь, что это также удовлетворит тех, кто в своем недоверии требует от спрашивающих гестюра самоуничижения в форме не только заявления о том, что они уже потратили значительный промежуток времени на борьбу с этим вопросом без реального успеха, но и предоставления фрагментов кода, которые образуют плохой и плохо написанный код, который бесполезен для кого-либо и может служить только для опровержения инсинуации о том, что они солгали, когда сказали, что уже потратили значительный промежуток времени на борьбу.

Я сделал 1. следующим громоздким способом:

\documentclass{book}
\newsavebox\mynormalbox
\newsavebox\myhugebox

\begin{document}

\savebox\mynormalbox{\hbox{\normalsize Text}}%
\savebox\myhugebox{\hbox{\huge Text}}%
Text Text \lower\dimexpr\ht\myhugebox-\ht\mynormalbox\relax\hbox{\huge Text Text} Text Text

\end{document}

Я сделал 2. следующим громоздким способом:

\documentclass{book}

\begin{document}
\noindent %\leavevmode
\vbox to 12\baselineskip{%
  \hbox{line 001}%
  \hbox{line 002}%
  \hbox{line 003}%
  \hbox{line 004}%
  \hbox{line 005}%
  \hbox{line 006}%
  \hbox{line 007}%
  \hbox{line 008}%
  \hbox{line 009}%
  \hbox{line 010}%
  \hbox{line 011}%
  \hbox{line 012}%
} 
\vrule{}
\vbox to 12\baselineskip{%
  \hbox{line 1 line 1 line 1 line 1 line 1 line 1}%
  \vskip-\lineskip
  \vbox to 3\baselineskip{\vfill\hbox{Line 2 Line 2 {\huge Line 2} Line 2 Line 2}}%
  \hbox{line 3 line 3 line 3 line 3 line 3 line 3}%
  \vskip-\lineskip
  \vbox to 3\baselineskip{\vfill\hbox{Line 4 Line 4 {\huge Line 4} Line 4 Line 4}}%
  \hbox{line 5 line 5 line 5 line 5 line 5 line 5}%
  \vskip-\lineskip
  \vbox to 3\baselineskip{\vfill\hbox{Line 6 Line 6 {\huge Line 6} Line 6 Line 6}}%
}%
\end{document}

Я сделал 3. следующим громоздким способом:

\documentclass{book}
\newsavebox\mynormalbox
\newsavebox\myhugebox

\begin{document}
\noindent %\leavevmode
\vbox to 16\baselineskip{%
  \vfill
  \hbox{\strut line 001}%
  \hbox{line 002}%
  \hbox{line 003}%
  \hbox{line 004}%
  \hbox{line 005}%
  \hbox{line 006}%
  \hbox{line 007}%
  \hbox{line 008}%
  \hbox{line 009}%
  \hbox{line 010}%
  \hbox{line 011}%
  \hbox{line 012}%
  \hbox{line 013}%
  \hbox{line 014}%
  \hbox{line 015}%
  \hbox{line 016\strut}%
  \vfill
} 
\vrule{}
\vbox to 16\baselineskip{%
  \vfill
  \savebox\mynormalbox{\hbox{\normalsize line1234567890}}%
  \savebox\myhugebox{\hbox{\huge  line1234567890}}%
  \hbox{\strut line 1 line 1 line 1 line 1 line 1 line 1}%
  \vtop to 3\baselineskip{%
    \hbox{\vphantom{line2}}%
    \hbox{line 2 line 2 \lower\dimexpr\ht\myhugebox-\ht\mynormalbox\relax\hbox{\huge line 2} line 2 line 2}%
    \vfill
  }%
  \vskip-\lineskip
  \hbox{line 3 line 3 line 3 line 3 line 3 line 3}%
  \vtop to 3\baselineskip{%
    \hbox{line 4 line 4 \lower\dimexpr\ht\myhugebox-\ht\mynormalbox\relax\hbox{\huge line 4} line 4 line 4}%
    \vfill
  }%
  \vskip-\lineskip
  \hbox{line 5 line 5 line 5 line 5 line 5 line 5}%
  \vbox to 3\baselineskip{%
    \vfill
    \hbox{\lower-\lineskip\hbox{line 6 line 6 {\huge line 6} line 6 line 6}}%
  }%
  \vskip-\lineskip
  \hbox{line 7 line 7 line 7 line 7 line 7 line 7}%
  \vbox to 2\baselineskip{%
    \vfill
    \hbox{\lower-\lineskip\hbox{line 8 line 8 {\huge line 8} line 8 line 8}}%
  }%
  \vskip-\lineskip
  \hbox{line 9 line 9 line 9 line 9 line 9 line 9\strut}%
  \vfill
}%
\end{document}

(В пунктах 2 и 3 «строка 001», «строка 002» и т. д. слева указаны только для того, чтобы показать, что базовые линии строк справа имеют вертикальные расстояния, кратные \baselineskipобычному шрифту нормального размера.)

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