
Gibt es in Latex eine Möglichkeit, die vertikale Dicke (Höhe) der vom \overline
Befehl generierten Linie zu ändern?
\[
\overline{\overline{A \vee B}} = \overline{\overline{A} \wedge \overline{B}}
\]
Antwort1
TeX
Die Standard-Linienstärke θ beträgt in TeX 0,4pt. Die \overline
Formel lautet \vbox
:
- Oben ist ein Kern von θ
- Es folgt der Balken mit der Dicke θ
- Die Lücke zur Formel hat die Höhe 3θ
- Die Formel folgt.
θ wird aus Fontdimen 8 der Math-Font-Familie 3 übernommen. Beispiel:
\documentclass{article}
\begin{document}
$\overline{abc}$
\fontdimen8\textfont3=5pt
$\overline{abc}$
\end{document}
Wie man sieht, verändert sich mit der Linienstärke auch der Abstand zwischen Linie und Formel (sogar bei Faktor 3).
LuaTeX/LuaLaTeX
LuaTeX macht die Parameter konfigurierbar:
\Umathoverbarkern
: der weiße Raum über der Linie\Umathoverbarrule
: dicke der Linie\Umathoverbarvgap
: die Lücke zwischen der Linie und der Formel
Diese Werte können für alle acht Mathematikstile festgelegt werden. LuaTeX stellt die eingeschränkten Stile auch wie folgt zur Verfügung:
\crampeddisplaystyle
\crampedtextstyle
\crampedscriptstyle
\crampedscriptscriptstyle
In engen Stilen, die für Formeln unter Balken ( \overline
,, \sqrt
Nenner bei Brüchen) verwendet werden, werden die Exponenten niedriger als üblich gesetzt.
LuaLaTeX fügt den neuen Primitiven von LuaTeX ein Präfix hinzu luatex
(um Namenskonflikte zu vermeiden). Das folgende Beispiel setzt \Umathoverbarrule
alle acht Stile ein:
\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}
Antwort2
Anstatt zu versuchen, sich mit der bestehenden Definition auseinanderzusetzen, könnte man seine eigene erstellen, indem man Stapel verwendet. Dabei 1.2\LMpt
ist der vertikale Versatz über dem Element der Überlinie und .4\LMpt
ist die Linienstärke. Als Teil eines \ThisStyle
Arguments \LMpt
ist ein 1pt groß \displaystyle
und \textstyle
, aber proportional reduziert in \scriptstyle
und \scriptscriptstyle
, wie im MWE gezeigt.
\mathop
Es kann gewünscht sein, ein um die Definition zu stapeln, aber das muss nicht sein .
\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}
Hier ändern wir beispielsweise den Versatz auf 1.4\LMpt
und die Dicke auf .6\LMpt
:
Antwort3
Die folgende Antwort ist keine Lösung, sondern ein einfacher Trick, der für einige Zwecke geeignet ist (undnichtfür alle Zwecke). Der \overbracket{}
Befehl im PaketMathetoolshat zwei Argumente (Linienstärke und Klammerhöhe):
\overbracket[〈rule thickness〉] [〈bracket height〉]{〈arg〉}
Angenommen, Sie legen eine Linealdicke kleiner fest alsXpt. Wenn Sie die Klammerhöhe auf-Xpt, dann erhalten Sie eine Linie (Werte zwischen 0 und minus der Linealstärke ergeben auch eine Linie, an den Extremen können jedoch kleine Anomalien sichtbar sein).
Die Lösung ist nicht streng genommen „richtig“, da die resultierende Linie etwas kürzer ist als die von \overline{}
und der Abstand zwischen den Linien nicht derselbe sein muss wie in \overline{\overline{}}
. Für einige Zwecke kann das Ergebnis jedoch ähnlich genug sein.
Im folgenden minimalen Arbeitsbeispiel sind zwei Befehle definiert: in \myov{}
wird die Breite in der Präambel festgelegt; in \myovline{}
gibt es ein Argument dafür. Ich habe die Klammerhöhe auf -1pt gesetzt, da alle Breiten im MWE unter 1pt liegen:
\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}