上線の太さ

上線の太さ

コマンドによって生成された線の垂直方向の太さ (高さ) を 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}

結果TeX

ご覧のとおり、線と数式の間の隙間も線の太さによって変化します (係数 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}

結果 LuaLaTeX

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

ここに画像の説明を入力してください

関連情報