
Não sei se isso é realmente uma boa ideia ou não, mas estou me perguntando se é possível implementar uma versão \frac
onde 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:
O de cima parece, aos meus olhos, um pouco bagunçado, mas usar \hfill
move o numerador muito para a esquerda. O que eu realmente quero (eu acho) é alinhá-los exatamente no colchete aberto. Então, estou imaginando um \alignedfrac
comando 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 \hfill
s para obter as justificativas porcionais. Depois, digito ambos adjacentes, com um negativo \mkern
entre eles.
Por sugestão de Mico, as ocorrências de |
foram substituídas por \mid
, para melhor aparência.
EDITADO para adicionar \vphantom
correspondê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\\#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}
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\@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 \halign
e 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.