
コマンドによって生成された線の垂直方向の太さ (高さ) を LaTeX で変更する方法はありますか\overline
?
\[
\overline{\overline{A \vee B}} = \overline{\overline{A} \wedge \overline{B}}
\]
答え1
テックス
TeXではデフォルトの罫線の太さ θ は 0.4pt です。\overline
式は次のように設定されます\vbox
。
- 上部にはθのカーンがある
- バーは厚さθで追従する
- 式とのギャップは高さ3θである
- 式は以下のとおりです。
θ は数学フォント ファミリ 3 のフォント寸法 8 から取得されます。例:
\documentclass{article}
\begin{document}
$\overline{abc}$
\fontdimen8\textfont3=5pt
$\overline{abc}$
\end{document}
ご覧のとおり、線と数式の間の隙間も線の太さによって変化します (係数 3 の場合でも)。
LuaTeX/LuaLaTeX
LuaTeX ではパラメータを設定できます:
\Umathoverbarkern
: 線の上の空白\Umathoverbarrule
: 線の太さ\Umathoverbarvgap
: 線と式の間の隙間
これらの値は、8 つの数式スタイルすべてに対して設定できます。LuaTeX では、次のように制限付きスタイルも使用できます。
\crampeddisplaystyle
\crampedtextstyle
\crampedscriptstyle
\crampedscriptscriptstyle
\overline
棒の下の数式 ( 、 、分数の分母)に使用される窮屈なスタイルでは\sqrt
、指数は通常よりも低く設定されます。
LuaLaTeX は、LuaTeX の新しいプリミティブにプレフィックスを追加しますluatex
(名前の衝突を避けるため)。次の例では\Umathoverbarrule
、8 つのスタイルすべてを設定します。
\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
が、 MWE に示すように、および\textstyle
では比例して減少します。\scriptstyle
\scriptscriptstyle
\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{}
パッケージ内のコマンド数学ツール2 つの引数 (罫線の太さと括弧の高さ) があります。
\overbracket[〈rule thickness〉] [〈bracket height〉]{〈arg〉}
ルールの太さを以下に設定すると、バツpt. ブラケットの高さを-バツpt にすると線が表示されます (0 からルールの太さのマイナスまでの値でも線が表示されますが、極端な場合には小さな異常が見える場合があります)。
結果の線は の線よりもわずかに短くなり\overline{}
、線間の距離は の場合と同じにならないため、この解は厳密には「正しい」とは言えません。\overline{\overline{}}
しかし、目的によっては結果が十分に類似している場合があります。
次の最小限の動作例では、2 つのコマンドが定義されています。 では、\myov{}
太さはプリアンブルで設定され、 では、\myovline{}
太さの引数があります。MWE の太さはすべて 1pt 未満なので、ブラケットの高さを -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}