Вертикальное выравнивание уравнений в таблице

Вертикальное выравнивание уравнений в таблице

Я пишу университетский проект и хочу создать таблицу с левой колонкой, содержащей диаграммы Фейнмана (которые я нарисовал с помощью пакета feynmp), и правой колонкой, содержащей уравнения. Однако, когда я это делаю, уравнения выравниваются вертикально в нижней части ячейки, и я не могу понять, как это изменить, чтобы они выровнялись по центру диаграммы в той же строке.

Вот пример кода, который, я надеюсь, продемонстрирует проблему, не требуя написания всего отчета.

\begin{table*}[t]
\centering
\begin{tabular}{|c|c|}
\hline
\textbf{feynmp diagram goes here}
&
$\begin{aligned} I &= \\ &\frac{D}{4} \end{aligned}$
\\
\hline
\end{tabular}
\end{table*}

решение1

Вы можете использовать m{width}табличный вариант:

\documentclass{article}

\usepackage{array}
\usepackage{amsmath}

\begin{document}
\begin{table*}[t]
\centering
\begin{tabular}{|c|m{5cm}|}
\hline
\textbf{feynmp diagram goes here} \newline
&
$\begin{aligned} I &= \\ &\frac{D}{4} \end{aligned}$
\\
\hline
\end{tabular}
\end{table*}
\end{document}

решение2

Вы можете сохранить cячейки, не указывая их ширину, с помощью простого \raisebox[-\height}(плюс визуальная коррекция, если необходимо). Я добавил немного вертикального отступа с помощью пакета cellspace:

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\usepackage{amsmath}
\usepackage{cellspace}
\setlength\cellspacetoplimit{6pt}
\setlength\cellspacebottomlimit{6pt}

\begin{document}

\begin{table*}[t]
  \centering
  \begin{tabular}{|Sc|c|}
    \hline
    \raisebox{\dimexpr-0.5\height+1ex\relax }{\fbox{\includegraphics[scale = 0.4]{Feynmann}}}
      & $ \begin{aligned} I & = \\\hline &\frac{D}{4} \end{aligned}$ \\
    \hline
  \end{tabular}
\end{table*}

\end{document} 

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

решение3

Вы также можете использоватьtikz-feynman(страница проекта). В частности, он имеет опцию inline, которая корректирует базовую линию диаграммы (таким же образом, какbaseline работает в TiкZ) и также делает диаграмму немного меньше, чтобы она хорошо вписывалась в уравнения или, в данном случае, в таблицы.

\documentclass{article}

\usepackage[compat=1.1.0]{tikz-feynman}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{cc}
  \toprule
  \multicolumn{2}{c}{\textbf{Feynman Rules}} \\
  \midrule
  \feynmandiagram[inline=(a), horizontal=i1 to a] {
    i1 [particle=\(A_{\mu}\)] -- [photon] a -- [fermion] f1,
    a -- [anti fermion] f2,
  }; &
  \(\displaystyle ig \gamma_{\mu}\) \\
  \feynmandiagram[inline=(a), horizontal=i1 to a] {
    i1 [particle=\(W^{\pm}_{\mu}\)]-- [photon] a -- [fermion] f1,
    a -- [anti fermion] f2,
  }; &
  \(\displaystyle \frac{ig}{\sqrt{2}} \gamma_{\mu} \frac{1 - \gamma_{5}}{2}\) \\
  \bottomrule
\end{tabular}
\end{document}

выход

решение4

Как я уже писал в вашем перекрестном сообщении наLaTeX-Community.org, вы можете использовать adjustboxпакет или stackengineпакет, как показано в этом примере с использованием вашего кода. Таким образом, вам не нужны m столбцов, которые требуют фиксированной ширины.

\documentclass{article} 
\usepackage[demo]{graphicx}
\usepackage{amsmath}
\usepackage{stackengine}
\begin{document}
\begin{table*}[t]
\centering
\begin{tabular}{|c|c|}
  \hline
  \Centerstack{\includegraphics{diagram}}
    &
  $\begin{aligned} I &= \\
  &\frac{D}{4} \end{aligned}$\\
\hline
\end{tabular}
\end{table*}
\end{document}

Центрированный вывод

Вы также можете изменить выравнивание по верхнему краю следующим образом:

  \belowbaseline[0pt]{\includegraphics{diagram}}
    &
  \belowbaseline[0pt]{$\begin{aligned} I &= \\
      &\frac{D}{4} \end{aligned}$}\\

верхний выход

На диаграмме внизу расположена базовая линия для вертикального выравнивания. Базовая линия дляaligned математической среды находится в ее центре (но ее можно изменить на верхнюю или нижнюю линию). В таблице базовые линии выровнены рядом друг с другом. Поэтому вы видите, что диаграмма поднимается выше базовой линии, математический текст на базовой линии остается внизу. Это выравнивание по базовой линии, а не по верхнему краю. Изменение его так, чтобы он рос ниже базовой линии, как это сделал я, дает верхнее выравнивание. См. такжеСообщение на форуме LaTeXдля справки или дальнейшего обсуждения.

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