Alinhando frações com uma guia de alinhamento

Alinhando frações com uma guia de alinhamento

Não sei se isso é realmente uma boa ideia ou não, mas estou me perguntando se é possível implementar uma versão \fraconde o numerador e o denominador possam ser alinhados em uma guia de alinhamento ( &).

Há muitas dúvidas sobre alinhamento de frações neste site, sendo a solução mais óbvia em muitos casos usar \hfill. Mas considere uma fração como esta:

insira a descrição da imagem aqui

O de cima parece, aos meus olhos, um pouco bagunçado, mas usar \hfillmove o numerador muito para a esquerda. O que eu realmente quero (eu acho) é alinhá-los exatamente no colchete aberto. Então, estou imaginando um \alignedfraccomando que me permitiria escrever

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

e faça com que alinhe o numerador e o denominador nos &caracteres.

Estou ciente de que isso pode ou não ser uma boa escolha e que provavelmente estou resolvendo um não problema, mas ainda assim estou curioso para saber se é possível implementar algo assim.

Aqui está o MWE que produz a imagem acima:

\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}

Responder1

Aqui eu construo a porção esquerda da frac ( \leftfrac) e a porção direita ( \rightfrac) independentemente, usando \hfills para obter as justificativas porcionais. Depois, digito ambos adjacentes, com um negativo \mkernentre eles.

Por sugestão de Mico, as ocorrências de |foram substituídas por \mid, para melhor aparência.

EDITADO para adicionar \vphantomcorrespondência, o que acredito que ajudará se as partes esquerda e direita tiverem extensões verticais diferentes.

\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}

insira a descrição da imagem aqui

Responder2

Você consegue:

\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}

Qual é o problema? Faço um alinhamento com o primitivo \haligne depois examino sua última linha desmontando a caixa construída. Eu guardo a dimensão das duas partes e as uso para fazer caixas com a largura certa.

Porém, não vejo nenhuma melhoria em relação à fração padrão, como mostra claramente a imagem.

insira a descrição da imagem aqui

informação relacionada