Центрирование элементов в пределах выделенного им пространства в выровненной(ой) среде

Центрирование элементов в пределах выделенного им пространства в выровненной(ой) среде

В следующем MWE я попытался использовать, alignчтобы гарантировать, что одинаково окрашенные термины расположены друг над другом. Я ищу решение, которое:

  1. Центрирует цветные термины вокруг общей вертикальной оси, которая в свою очередь центрируется относительно выделенного горизонтального пространства.
  2. Пусть вся выровненная среда занимает ровно столько горизонтального пространства, сколько необходимо (как в примере 2)
  3. Дайте каждому уравнению собственный тег/метку (как в примере 1)
  4. Это лишь один из многих примеров. Мне бы хотелось избежать необходимости вручную указывать выравнивание «этой части от этого к той части от того» за пределами того, что alignуже известно.

Вот мой MWE:

\documentclass{article} 
\usepackage{amsmath} 
\usepackage{xcolor} 
\newcommand{\COne}{\color{red}}
\newcommand{\CTwo}{\color{blue}}

\begin{document}
\begin{align}
( \varphi \rightarrow (&{\COne\psi} &\rightarrow {\CTwo\chi} ) )   \\
( \varphi \rightarrow ( &{\COne( \varphi \rightarrow \varphi )} &\rightarrow{\CTwo\varphi} ) )
\end{align}

\begin{equation}
\begin{aligned}
( \varphi \rightarrow (&{\COne\psi} &&\rightarrow {\CTwo\chi} ) )   \\
( \varphi \rightarrow ( &{\COne( \varphi \rightarrow \varphi )} &&\rightarrow{\CTwo\varphi} ) )
\end{aligned}
\end{equation}

\end{document}

Мои усилия на данный момент

Вот примерно тот результат, который мне нужен:

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

Обновлять: Решение @Werner работает отлично, за исключением больших выражений, я все еще получаю непреднамеренное «растяжение» в выводе:

\begin{align}
( \varphi \rightarrow (&\eqmakebox[a]{$\COne\psi$} \rightarrow {\CTwo\chi} )  \rightarrow 
 ( ( \varphi \rightarrow &\eqmakebox[b]{$\COne\psi$} ) \rightarrow ( \varphi \rightarrow{\CTwo \chi} ) )  \\
( \varphi \rightarrow ( &\eqmakebox[a]{$\COne( \varphi \rightarrow \varphi )$} \rightarrow  {\CTwo\varphi} ) ) \rightarrow  
( ( \varphi \rightarrow &\eqmakebox[b]{$\COne( \varphi \rightarrow \varphi ) $}) \rightarrow ( \varphi \rightarrow {\CTwo\varphi} ) )
\end{align}

Конечный результат: Спасибо, @Werner.

\documentclass{article} 
\usepackage{amsmath,eqparbox,xcolor} 
\newcommand{\COne}{\color{red}}
\newcommand{\CTwo}{\color{blue}}

\begin{document}

\begin{alignat}{5}
\varphi \rightarrow (&\eqmakebox[a]{$\COne\psi$} &\rightarrow &{\CTwo\chi} ) &\rightarrow 
( ( \varphi \rightarrow &\eqmakebox[b]{$\COne\psi$} ) \rightarrow ( \varphi \rightarrow{\CTwo \chi} )  \\
\varphi \rightarrow ( &\eqmakebox[a]{$\COne( \varphi \rightarrow \varphi )$} &\rightarrow  &{\CTwo\varphi} ) ) &\rightarrow  
( ( \varphi \rightarrow &\eqmakebox[b]{$\COne( \varphi \rightarrow \varphi ) $}) \rightarrow ( \varphi \rightarrow {\CTwo\varphi} ) 
\end{alignat}


\end{document}

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

решение1

Поместите элементы одинаковой ширины в блок одинаковой ширины, используяeqparbox' s \eqmakebox[<tag>][<align>]{<stuff>}. Подобные <tag>s дадут блоки схожего размера (по ширине, соответствующие самому широкому ), где вы также <stuff>можете изменить ment (по умолчанию entre):<align>c

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

\documentclass{article}
\usepackage{amsmath,xcolor,eqparbox}
\newcommand{\COne}{\color{red}}
\newcommand{\CTwo}{\color{blue}}

\begin{document}

\begin{align}
  ( \varphi \rightarrow ( &{\COne\psi} &\rightarrow {\CTwo\chi} ) )   \\
  ( \varphi \rightarrow ( &{\COne( \varphi \rightarrow \varphi )} &\rightarrow{\CTwo\varphi} ) )
\end{align}

\begin{equation}
  \begin{aligned}
  ( \varphi \rightarrow ( &{\COne\psi} &&\rightarrow {\CTwo\chi} ) )   \\
  ( \varphi \rightarrow ( &{\COne( \varphi \rightarrow \varphi )} &&\rightarrow{\CTwo\varphi} ) )
  \end{aligned}
\end{equation}

\begin{align}
  ( \varphi \rightarrow ( &\eqmakebox[psi]{$\COne\psi$} \rightarrow {\CTwo\chi} ) )   \\
  ( \varphi \rightarrow ( &\eqmakebox[psi]{$\COne( \varphi \rightarrow \varphi )$}\rightarrow{\CTwo\varphi} ) )
\end{align}

\end{document}

Компилировать дважды в первый раз, так как ширина самого широкого элемента записывается в .auxи считывается во время последующего запуска. Любые изменения элементов в пределах самого широкого <stuff>потребуют дополнительных запусков.

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