
これが本当に良いアイデアかどうかはわかりませんが、\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\\#3\relax{%
\frac{\hfill#1\vphantom{#2}}{\hfill#3\vphantom{#4}}}
\def\rightfrac#1\\#3\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\@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 つのパーツの寸法を保存し、それらを使用して適切な幅のボックスを作成します。
しかし、画像が明らかに示しているように、標準分数に関しては改善が見られません。