配置タブで分数を揃える

配置タブで分数を揃える

これが本当に良いアイデアかどうかはわかりませんが、\frac分子と分母を位置合わせタブ ( &) で位置合わせできるバージョンを実装できるかどうか疑問に思っています。

このサイトには分数の配置に関する質問が多数ありますが、多くの場合、最も明白な解決策は を使用することです\hfill。しかし、次のような分数を考えてみましょう。

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

上のものは、私の目には少々乱雑に見えますが、 を使用すると分子が左に行き過ぎてしまいます。私が本当に望んでいるのは(私が思うに)それらを開き括弧で正確に揃えることです。そこで、次のように書けるコマンド\hfillを想像しています。\alignedfrac

\[
\alignedfrac{q&(x\mid y)}{p_\mathrm{foo}&(w\mid x,y,z)}
\]

そして、分子と分母を文字に合わせて揃えます&

これが実際に良い選択であるかどうかはわかりませんし、おそらく問題ではないことを解決していると思いますが、それでも、このようなものを実装することが可能かどうか興味があります。

上記の画像を生成する MWE は次のとおりです。

\documentclass{article}
\begin{document}

\noindent without any alignment:
\[
\frac{q(x\mid y)}{p_\mathrm{foo}(w\mid x,y,z)}
\]
using hfill:
\[
\frac{q(x\mid y)\hfill}{p_\mathrm{foo}(w\mid x,y,z)}
\]
\end{document}

答え1

ここでは、s を使用して部分的な位置揃えを行い、frac の左側部分 ( \leftfrac) と右側部分 ( \rightfrac) を個別に構築します。次に、両者を隣接させてタイプセットし、その間に\hfill負の符号を置きます。\mkern

Mico の提案により、見栄えを良くするために|が に置き換えられました\mid

マッチングを追加するために編集しました\vphantom。これは、左側と右側の部分が垂直方向の範囲が異なる場合に役立つと思います。

\documentclass{article}
\begin{document}
\newcommand\alignedfrac[2]{%
  \leftfrac#1\\#2\relax\mkern-4.5mu\rightfrac#1\\#2\relax
}
\def\leftfrac#1&#2\\#3&#4\relax{%
  \frac{\hfill#1\vphantom{#2}}{\hfill#3\vphantom{#4}}}
\def\rightfrac#1&#2\\#3&#4\relax{%
  \frac{\vphantom{#1}#2\hfill}{\vphantom{#3}#4\hfill}}
\noindent without any alignment:
\[
\frac{q(x\mid y)}{p_\mathrm{foo}(w\mid x,y,z)}
\]
using hfill:
\[
\frac{q(x\mid y)\hfill}{p_\mathrm{foo}(w\mid x,y,z)}
\]
using alignedfrac
\[
\alignedfrac{q&(x\mid y)}{p_\mathrm{foo}&(w\mid x,y,z)}
\]

\end{document}

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

答え2

できますよ:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\alignedfrac}[2]{%
  \begingroup
  \setbox0=\vbox{%
    \m@th
    \ialign{&$\displaystyle##$\cr#1\cr#2\cr}%
    \setbox2=\lastbox
    \hbox{%
      \unhbox2
      \unskip
      \setbox4=\lastbox
      \unskip
      \setbox6=\lastbox
      \global\dimen1=\wd6
      \global\dimen3=\wd4
    }
  }
  \frac{\af@make#1\@nil}{\af@make#2\@nil}
  \endgroup
}
\def\af@make#1&#2\@nil{%
  \makebox[\dimen1][r]{$\displaystyle#1$}%
  \makebox[\dimen3][l]{$\displaystyle#2$}%
}
\makeatother

\begin{document}

\begin{gather*}
\alignedfrac{q&(x\mid y)}{p_\mathrm{foo}&(w\mid x,y,z)} \\
\frac{q(x\mid y)}{p_\mathrm{foo}(w\mid x,y,z)}
\end{gather*}

\end{document}

何をするのでしょうか? プリミティブと位置合わせを行い\halign、構築されたボックスを分解して最後の行を調べます。 2 つのパーツの寸法を保存し、それらを使用して適切な幅のボックスを作成します。

しかし、画像が明らかに示しているように、標準分数に関しては改善が見られません。

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

関連情報