我想在符号 \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}