在乳胶中有没有办法改变命令生成的线的垂直厚度(高度)\overline
?
\[
\overline{\overline{A \vee B}} = \overline{\overline{A} \wedge \overline{B}}
\]
答案1
TeX
TeX中默认的规则厚度θ为0.4pt,\overline
公式如下\vbox
:
- 顶部是 θ 的核数
- 杆的厚度为 θ
- 公式中的间隙高度为 3θ
- 公式如下。
θ 取自数学字体系列 3 的 fontdimen 8。例如:
\documentclass{article}
\begin{document}
$\overline{abc}$
\fontdimen8\textfont3=5pt
$\overline{abc}$
\end{document}
可以看出,线条和公式之间的间隙也会随着线条的粗细而变化(即使是因子 3)。
LuaTeX/LuaLaTeX
LuaTeX 使参数可配置:
\Umathoverbarkern
:线上方的空白处\Umathoverbarrule
: 线的粗细\Umathoverbarvgap
:线与公式之间的差距
可以为所有八种数学样式设置这些值。LuaTeX 还可以将狭窄的样式设置为:
\crampeddisplaystyle
\crampedtextstyle
\crampedscriptstyle
\crampedscriptscriptstyle
在用于条形下方公式的狭窄样式中(分数中的分母\overline
、\sqrt
分母),指数设置得比平常更低。
LuaLaTeX 为 LuaTeX 的新原语添加了前缀luatex
(以避免名称冲突)。以下示例设置了\Umathoverbarrule
所有八种样式:
\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}
答案2
与其与现有定义抗衡,不如使用堆栈设计自己的定义。这里,1.2\LMpt
是上划线项目上方的垂直偏移量,.4\LMpt
是规则厚度。作为\ThisStyle
参数的一部分,\LMpt
是 1pt,它\displaystyle
和\textstyle
,但在\scriptstyle
和中按比例减小\scriptscriptstyle
,如 MWE 所示。
\mathop
人们可能希望或不希望在定义周围堆叠。
\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}
例如,在这里,我们将偏移量更改为1.4\LMpt
,将厚度更改为.6\LMpt
:
答案3
以下答案不是一个解决方案,而是一个适合某些目的的简单技巧(并且不是用于所有目的)。\overbracket{}
包中的命令数学工具有两个参数(规则厚度和括号高度):
\overbracket[〈rule thickness〉] [〈bracket height〉]{〈arg〉}
假设您将规则厚度设置为小于Xpt。如果将支架高度设置为-Xpt 然后你会得到一条线(0 到减去规则厚度之间的值也会产生一条线,但在其极端情况下可能会出现小的异常)。
该解决方案并非严格意义上的“正确”,因为生成的线比 的线略短,\overline{}
并且线之间的距离不应与 中的相同\overline{\overline{}}
。但对于某些目的,结果可能足够相似。
在以下最小工作示例中,定义了两个命令:在\myov{}
序言中设置厚度;在\myovline{}
有一个参数。我将括号高度设置为 -1pt,因为 MWE 中的所有厚度都低于 1pt:
\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}