Quero inserir uma linha tracejada sobre os símbolos \bigwedge e \bigvee de forma que pareça exatamente uma linha sólida sobre os mesmos símbolos. Eu sei como inserir uma linha sólida sobre esses símbolos (por exemplo, \overline{\bigwedge}). Desde que perguntei a umperguntaalguns anos atrás, sobre como adicionar uma seta tracejada sobre uma letra, tentei usar o código daí. Código resultante:
\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}
Documento resultante:
Eu tenho os seguintes problemas:
- De alguma forma, no modo inline, o símbolo $\preclosure{\bigwedge}$ fica maior do que apenas $\bigwedge$.
- A linha tracejada não aloca espaço vertical e atravessa o texto
- Parece-me que quando $\overline{\bigvee}$ está embutido, então o overline está muito próximo do símbolo V, fazendo com que pareça quase um triângulo. Se eu aumentar o zoom, posso ver que não é assim, mas com zoom de 100% parece muito próximo. Como mover o overline um pouco mais para cima? Ou você acha que isso não é um problema?
Não é necessário usar exatamente o mesmo código que escrevi, apenas usei o que já tinha, mas não obtive sucesso :)
Responder1
Eu evitaria \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}
Você provavelmente deseja definir
\newcommand{\fbigvee}{\fillover{\bigvee}}
\newcommand{\dbigvee}{\dashover{\bigvee}}
Os comandos \fillover
possuem \dashover
um argumento opcional que define o tipo do objeto. O padrão é \mathop
, mas pode ser \mathrel
ou \mathbin
, então você pode usar
\newcommand{\dvee}{\dashover[\mathbin]{\vee}}
e $x\dvee y$
produziria
Você pode querer ajustar o espaço de separação, o argumento \noalign
no código para \df@@over
. Porém, a macro não está otimizada para usos diferentes de \mathop
, algo mais deve ser feito no caso de outros tipos.
Responder2
Isso pode ter a desvantagem de afetar ligeiramente o espaçamento entre linhas, mas...
Eu substituo \Overline
o que faz \overline
com um pequeno espaço extra na pilha adicionado.
E para \preclosure
, modifiquei-o para preservar o estilo matemático do argumento, usando a \ThisStyle{...\SavedStyle...}
construção do scalerel
pacote.
Eu realmente não abordei a questão da lacuna insuficiente entre \preclosure
a linha acima dela. Eu sugeriria usar cunhas menores (se isso for permitido) ou usar espaçamentos maiores entre linhas.
\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}