Ich möchte eine gestrichelte Linie über die Symbole \bigwedge und \bigvee einfügen, und zwar so, dass sie genau wie eine durchgezogene Linie über denselben Symbolen aussieht. Ich weiß, wie man eine durchgezogene Linie über diese Symbole einfügt (zum Beispiel \overline{\bigwedge}). Da ich eineFragevor ein paar Jahren habe ich versucht, den Code von dort zu verwenden. Der resultierende Code:
\documentclass[11pt,a4paper,draft]{amsart}
\pagestyle{plain}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{tikz} %for dash
\makeatletter
\newcommand{\preclosure}[1]{%
\vbox {\m@th\ialign{##\crcr
\preclosurefill \crcr
\noalign{\kern-\p@\nointerlineskip}
$\hfil\displaystyle{#1}\hfil$\crcr}}}
%% fill with (short) minus signs
\def\preclosurefill{%
$\m@th%
\xleaders\hbox{$\mkern0mu\shortbar\mkern0mu$}\hfill%
\shortbar%
$}
%% make the minus shorter to fit \dashedleftarrow
\def\shortbar{%
\smash{\scalebox{0.4}[1.0]{$-$}}}
\makeatother
\begin{document}
In order to distinguish between lattice operations $\bigvee, \bigwedge$ in structure A, we use the following symbols: $\overline{\bigvee}, \overline{\bigwedge}$. Similarly, to distinguish between operations $\bigvee, \bigwedge$ in structure B, we use the following symbols: $\preclosure{\bigvee}, \preclosure{\bigwedge}$.
Inline: $\overline{\bigvee}_{\alpha \in I}$, $\preclosure{\bigvee}_{\alpha \in I}$.
In separate line:
\[
\overline{\bigvee_{\alpha \in I}}, \preclosure{\bigvee_{\alpha \in I}}.
\]
\end{document}
Resultierendes Dokument:
Ich habe folgende Probleme:
- Im Inline-Modus wird das Symbol $\preclosure{\bigwedge}$ irgendwie größer gemacht als nur $\bigwedge$.
- Die gestrichelte Linie weist keinen vertikalen Raum zu und verläuft in den Text
- Mir scheint, wenn $\overline{\bigvee}$ inline ist, dann ist die Überlinie zu nah am V-Symbol, sodass es fast wie ein Dreieck aussieht. Wenn ich hineinzoome, sehe ich, dass das nicht so ist, aber bei 100 % Zoom sieht es zu nah aus. Wie kann ich die Überlinie etwas höher verschieben? Oder denken Sie, dass das kein Problem ist?
Es ist nicht notwendig, genau denselben Code zu verwenden, den ich geschrieben habe. Ich habe einfach verwendet, was ich bereits hatte, aber ohne Erfolg :)
Antwort1
Ich würde vermeiden \overline
:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\dashover}[2][\mathop]{#1{\mathpalette\df@over{{\dashfill}{#2}}}}
\newcommand{\fillover}[2][\mathop]{#1{\mathpalette\df@over{{\solidfill}{#2}}}}
\newcommand{\df@over}[2]{\df@@over#1#2}
\newcommand\df@@over[3]{%
\vbox{
\offinterlineskip
\ialign{##\cr
#2{#1}\cr
\noalign{\kern1pt}
$\m@th#1#3$\cr
}
}%
}
\newcommand{\dashfill}[1]{%
\kern-.5pt
\xleaders\hbox{\kern.5pt\vrule height.4pt width \dash@width{#1}\kern.5pt}\hfill
\kern-.5pt
}
\newcommand{\dash@width}[1]{%
\ifx#1\displaystyle
2pt
\else
\ifx#1\textstyle
1.5pt
\else
\ifx#1\scriptstyle
1.25pt
\else
\ifx#1\scriptscriptstyle
1pt
\fi
\fi
\fi
\fi
}
\newcommand{\solidfill}[1]{\leaders\hrule\hfill}
\makeatother
\begin{document}
Text:
$\bigvee_{\alpha\in I}$,
$\fillover{\bigvee}_{\alpha \in I}$,
$\dashover{\bigvee}_{\alpha \in I}$.
Subscript:
$\scriptstyle\bigvee_{\alpha\in I}$,
$\scriptstyle\fillover{\bigvee}_{\alpha \in I}$,
$\scriptstyle\dashover{\bigvee}_{\alpha \in I}$.
Display:
\[
\bigvee_{\alpha \in I}
\fillover{\bigvee}_{\alpha \in I}
\dashover{\bigvee}_{\alpha \in I}.
\]
\end{document}
Sie möchten wahrscheinlich definieren
\newcommand{\fbigvee}{\fillover{\bigvee}}
\newcommand{\dbigvee}{\dashover{\bigvee}}
Die Befehle \fillover
und \dashover
haben ein optionales Argument, das den Typ des Objekts festlegt. Der Standardwert ist \mathop
, aber es kann auch \mathrel
oder sein \mathbin
, Sie können also verwenden
\newcommand{\dvee}{\dashover[\mathbin]{\vee}}
und $x\dvee y$
würde produzieren
Möglicherweise möchten Sie den Trennraum und das Argument \noalign
im Code für anpassen \df@@over
. Das Makro ist jedoch nicht für andere Verwendungen als optimiert \mathop
. Bei anderen Typen sollte mehr getan werden.
Antwort2
Dies hat möglicherweise den Nachteil, dass der Zeilenabstand leicht beeinflusst wird, aber ...
Ich ersetze \Overline
es, indem ich \overline
einen kleinen zusätzlichen Stapelabstand hinzufüge.
Und für \preclosure
habe ich es so geändert, dass der mathematische Stil des Arguments unter Verwendung der \ThisStyle{...\SavedStyle...}
Konstruktion des scalerel
Pakets erhalten bleibt.
Ich habe das Problem des zu geringen Abstands zwischen der Zeile \preclosure
und der darüber liegenden Zeile nicht wirklich angesprochen. Ich würde vorschlagen, entweder kleinere Keile zu verwenden (falls das erlaubt ist) oder einen größeren Zeilenabstand zu wählen.
\documentclass[11pt,a4paper,draft]{amsart}
\pagestyle{plain}
\usepackage[a4paper]{geometry}
\usepackage{scalerel,stackengine}
\stackMath
\usepackage[utf8]{inputenc}
\usepackage{tikz} %for dash
\def\Overline#1{\ThisStyle{\overline{\addstackgap[.4pt]{\SavedStyle#1}}}}
\makeatletter
\newcommand{\preclosure}[1]{%
\ThisStyle{%
\vbox {\m@th\ialign{##\crcr
\preclosurefill \crcr
\noalign{\kern-\p@\nointerlineskip}
$\hfil\SavedStyle{#1}\hfil$\crcr}}}}
%% fill with (short) minus signs
\def\preclosurefill{%
$\m@th%
\xleaders\hbox{$\mkern0mu\shortbar\mkern0mu$}\hfill%
\shortbar%
$}
%% make the minus shorter to fit \dashedleftarrow
\def\shortbar{%
\smash{\scalebox{0.4}[1.0]{$-$}}}
\makeatother
\begin{document}
In order to distinguish between lattice operations $\bigvee, \bigwedge$ in structure A, we use the following symbols: $\Overline{\bigvee}, \Overline{\bigwedge}$. Similarly, to distinguish between operations $\bigvee, \bigwedge$ in structure B, we use the following symbols: $\preclosure{\bigvee}, \preclosure{\bigwedge}$.
Inline: $\Overline{\bigvee}_{\alpha \in I}$, $\preclosure{\bigvee}_{\alpha \in I}$.
In separate line:
\[
\Overline{\bigvee_{\alpha \in I}}, \preclosure{\bigvee_{\alpha \in I}}.
\]
\end{document}