Я хочу вставить пунктирную линию над символами \bigwedge и \bigvee таким образом, чтобы она выглядела точно так же, как сплошная линия над теми же символами. Я знаю, как вставить сплошную линию над этими символами (например, \overline{\bigwedge}). Поскольку я спросилвопросНесколько лет назад о том, как добавить пунктирную стрелку над буквой, я пытался использовать код оттуда. Результирующий код:
\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}
Итоговый документ:
У меня следующие проблемы:
- Каким-то образом во встроенном режиме символ $\preclosure{\bigwedge}$ становится больше, чем просто $\bigwedge$.
- Пунктирная линия не распределяет вертикальное пространство и врезается в текст.
- Мне кажется, что когда $\overline{\bigvee}$ инлайн, то верхняя линия слишком близко к символу V, делая его почти треугольным. Если я увеличиваю масштаб, то я вижу, что это не так, но при 100% увеличении она выглядит слишком близко. Как переместить верхнюю линию немного выше? Или вы думаете, что это не проблема?
Не обязательно использовать именно тот код, который я написал, я просто использовал то, что у меня уже было, но не успешно :)
решение1
Я бы избегал \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}
Вы, вероятно, хотите определить
\newcommand{\fbigvee}{\fillover{\bigvee}}
\newcommand{\dbigvee}{\dashover{\bigvee}}
Команды \fillover
и \dashover
имеют необязательный аргумент, который задает тип объекта. По умолчанию это \mathop
, но это может быть \mathrel
или \mathbin
, поэтому вы можете использовать
\newcommand{\dvee}{\dashover[\mathbin]{\vee}}
и $x\dvee y$
будет производить
Возможно, вам захочется настроить разделительное пространство, аргумент \noalign
в коде для \df@@over
. Однако макрос не оптимизирован для использования, отличного от \mathop
, в случае других типов следует сделать что-то еще.
решение2
Это может иметь недостаток в виде небольшого изменения межстрочного интервала, но...
Я заменяю \Overline
, который делает , \overline
с добавлением небольшого дополнительного зазора в стеке.
А для \preclosure
я модифицировал его так, чтобы он сохранил математический стиль аргумента, используя \ThisStyle{...\SavedStyle...}
конструкцию пакета scalerel
.
Я на самом деле не затронул вопрос недостаточного зазора между \preclosure
и линией над ней. Я бы предложил либо использовать меньшие клинья (если это разрешено), либо перейти к большему интервалу между линиями.
\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}