上線厚度

上線厚度

Latex 有沒有辦法改變指令產生的線條的垂直厚度(高度)\overline

\[
\overline{\overline{A \vee B}} = \overline{\overline{A} \wedge \overline{B}}
\]

答案1

特克斯

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, an\LMpt是 1pt it\displaystyle\textstyle,但在\scriptstyle和中按比例減少\scriptscriptstyle,如 MWE 中所示。

\mathop人們可能希望也可能不希望在定義周圍加上 a 。

\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〉}

假設您設定的標線厚度小於X角如果將支架高度設定為-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}

在此輸入影像描述

相關內容