Толщина верхней линии

Толщина верхней линии

Есть ли в Latex способ изменить вертикальную толщину (высоту) линии, генерируемой командой \overline?

\[
\overline{\overline{A \vee B}} = \overline{\overline{A} \wedge \overline{B}}
\]

решение1

ТеХ

Толщина линии по умолчанию θ составляет 0,4pt в TeX. \overlineФормула задается как \vbox:

  • Вверху находится керн θ
  • Далее следует стержень толщиной θ
  • Разрыв в формуле имеет высоту 3θ
  • Формула следующая.

θ взят из шрифта fontdimen 8 семейства математических шрифтов 3. Пример:

\documentclass{article}

\begin{document}
  $\overline{abc}$
  \fontdimen8\textfont3=5pt
  $\overline{abc}$
\end{document}

Результат ТеХ

Как можно видеть, зазор между линией и формулой также изменяется в зависимости от толщины линии (даже с коэффициентом 3).

LuaTeX/LuaLaTeX

LuaTeX позволяет настраивать параметры:

  • \Umathoverbarkern: пустое пространство над строкой
  • \Umathoverbarrule: толщина линии
  • \Umathoverbarvgap: зазор между линией и формулой

Эти значения можно задать для всех восьми математических стилей. LuaTeX также делает стили cramped доступными как:

  • \crampeddisplaystyle
  • \crampedtextstyle
  • \crampedscriptstyle
  • \crampedscriptscriptstyle

В сжатых стилях, используемых для формул под чертами ( \overline, \sqrt, знаменатель в дробях), показатели степени устанавливаются ниже обычных.

LuaLaTeX добавляет префикс luatexк новым примитивам LuaTeX (чтобы избежать конфликтов имен). Следующий пример устанавливает \Umathoverbarruleвсе восемь стилей:

\documentclass{article}

\newcommand*{\setumath}[2]{%
  \csname luatexUmath#1\endcsname\displaystyle=#2\relax
  \csname luatexUmath#1\endcsname\luatexcrampeddisplaystyle=#2\relax
  \csname luatexUmath#1\endcsname\textstyle=#2\relax
  \csname luatexUmath#1\endcsname\luatexcrampedtextstyle=#2\relax
  \csname luatexUmath#1\endcsname\scriptstyle=#2\relax
  \csname luatexUmath#1\endcsname\luatexcrampedscriptstyle=#2\relax
  \csname luatexUmath#1\endcsname\scriptscriptstyle=#2\relax
  \csname luatexUmath#1\endcsname\luatexcrampedscriptscriptstyle=#2\relax
}

\begin{document}
  \newcommand*{\test}[1]{%
    \csname check@mathfonts\endcsname
    \setumath{overbarrule}{#1}%
    $\overline{abc}$ % additional space
  }
  \test{.1pt}
  \test{.4pt}
  \test{1.6pt}
  \test{6.4pt}
\end{document}

Результат LuaLaTeX

решение2

Вместо того, чтобы пытаться бороться с существующим определением, можно разработать свое собственное, используя стеки. Здесь 1.2\LMpt— это вертикальное смещение над элементом линии, а .4\LMpt— толщина линии. Как часть аргумента \ThisStyle, an \LMpt— это 1pt it \displaystyleи \textstyle, но пропорционально уменьшено в \scriptstyleи \scriptscriptstyle, как показано в MWE.

Можно захотеть или не захотеть нагромождать a \mathopвокруг определения.

\documentclass{article}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}
\def\myoverline#1{\ThisStyle{%
  \setbox0=\hbox{$\SavedStyle#1$}%
  \stackengine{1.2\LMpt}{$\SavedStyle#1$}{\rule{\wd0}{.4\LMpt}}{O}{c}{F}{F}{S}%
}}
\begin{document}
\[
\myoverline{\myoverline{A \vee B}} = \myoverline{\myoverline{A} \wedge
\myoverline{B}}
\]\[
\scriptscriptstyle
\myoverline{\myoverline{A \vee B}} = \myoverline{\myoverline{A} \wedge
\myoverline{B}}
\]
\end{document}

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

Например, здесь мы меняем смещение на 1.4\LMpt, а толщину на .6\LMpt:

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

решение3

Следующий ответ — не решение, а простой прием, подходящий для некоторых целей (инетдля всех целей). \overbracket{}Команда в пакетеmathtoolsимеет два аргумента (толщина линейки и высота скобки):

\overbracket[〈rule thickness〉] [〈bracket height〉]{〈arg〉}

Предположим, вы установили толщину линейки меньше, чемИксpt. Если вы установите высоту кронштейна на-Иксpt, то вы получите линию (значения от 0 до минус толщины линейки также дают линию, но в ее крайних точках могут быть видны небольшие аномалии).

Решение не является строго «правильным», поскольку полученная линия немного короче, чем у , \overline{}а расстояние между линиями не будет таким же, как в \overline{\overline{}}. Но для некоторых целей результат может быть достаточно похожим.

В следующем минимальном рабочем примере определены две команды: в \myov{}задается толщина в преамбуле; в \myovline{}есть аргумент для нее. Я устанавливаю высоту скобки на -1pt, потому что все толщины в MWE меньше 1pt:

\documentclass{article}
\usepackage{mathtools}
\newcommand*{\myov}[1]{\overbracket[0.65pt][-1pt]{#1}}
\newcommand*{\myovline}[2]{\overbracket[#2][-1pt]{#1}}
\begin{document}
$$\overline{A \vee B} = \overline{\overline{A} \wedge \overline{A}}$$ % Default thickness = 0.4 pt
$$\myovline{A \vee B}{0.4pt} = \myovline{\myovline{A}{0.4pt} \wedge \myovline{A}{0.4pt}}{0.4pt}$$
$$\myovline{A \vee B}{0.6pt} = \myovline{\myovline{A}{0.8pt} \wedge \myovline{A}{0.8pt}}{0.8pt}$$
$$\myov{A \vee B} = \myov{\myov{A} \wedge \myov{A}}$$
\end{document}

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

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