上划线厚度

上划线厚度

在乳胶中有没有办法改变命令生成的线的垂直厚度(高度)\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}

结果 TeX

可以看出,线条和公式之间的间隙也会随着线条的粗细而变化(即使是因子 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}

结果 LuaLaTeX

答案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}

在此处输入图片描述

相关内容