
Есть ли в 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}
решение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}