Überliniendicke

Überliniendicke

Gibt es in Latex eine Möglichkeit, die vertikale Dicke (Höhe) der vom \overlineBefehl 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 \overlineFormel 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}

Ergebnis TeX

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,, \sqrtNenner 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 \Umathoverbarrulealle 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}

Ergebnis LuaLaTeX

Antwort2

Anstatt zu versuchen, sich mit der bestehenden Definition auseinanderzusetzen, könnte man seine eigene erstellen, indem man Stapel verwendet. Dabei 1.2\LMptist der vertikale Versatz über dem Element der Überlinie und .4\LMptist die Linienstärke. Als Teil eines \ThisStyleArguments \LMptist ein 1pt groß \displaystyleund \textstyle, aber proportional reduziert in \scriptstyleund \scriptscriptstyle, wie im MWE gezeigt.

\mathopEs 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}

Bildbeschreibung hier eingeben

Hier ändern wir beispielsweise den Versatz auf 1.4\LMptund die Dicke auf .6\LMpt:

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen