
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}
可以看出,線條和公式之間的間隙也隨著線條的粗細而變化(即使因子為 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
, 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}