Выравнивание дробей с помощью вкладки выравнивания

Выравнивание дробей с помощью вкладки выравнивания

Я не знаю, действительно ли это хорошая идея или нет, но мне интересно, можно ли реализовать версию, в \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

Здесь я строю левую часть frac ( \leftfrac) и правую часть ( \rightfrac) независимо, используя \hfills для достижения частичных выравниваний. Затем я набираю обе рядом, с отрицанием \mkernмежду ними.

По предложению Мико, для лучшего восприятия вхождения |были заменены на .\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, а затем проверяю его последний ряд, разбирая построенный ящик. Я сохраняю размеры двух частей и использую их для создания ящиков нужной ширины.

Однако я не вижу никаких улучшений по сравнению со стандартной дробью, что наглядно показано на изображении.

введите описание изображения здесь

Связанный контент