Неправильное расположение \noalign при центрировании ячейки tabularx

Неправильное расположение \noalign при центрировании ячейки tabularx

У меня есть минимальный документ LaTeX, например такой:

\documentclass{article}
\usepackage{tabularx}
\begin{document}
  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \centering A & B \\ \hline
    1.0 & 2.0 \\
  \end{tabularx}
\end{document}

АБ 1.0 2.0

Я хотел бы отцентрировать заголовки таблиц, но выровнять столбцы по левому краю. Однако, когда я добавляю \centeringв заголовок B, вот так:

\documentclass{article}
\usepackage{tabularx}
\begin{document}
  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \centering A & \centering B \\ \hline
    1.0 & 2.0 \\
  \end{tabularx}
\end{document}

Я получаю эту ошибку:

! Misplaced \noalign.
\hline ->\noalign
                  {\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.8   \end{tabularx}

! Extra alignment tab has been changed to \cr.
<recently read> \endtemplate

l.8   \end{tabularx}

! Misplaced \noalign.
\hline ->\noalign
                  {\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.8   \end{tabularx}

! Extra alignment tab has been changed to \cr.
<recently read> \endtemplate

l.8   \end{tabularx}

! Misplaced \noalign.
\hline ->\noalign
                  {\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.8   \end{tabularx}

! Extra alignment tab has been changed to \cr.
<recently read> \endtemplate

l.8   \end{tabularx}

решение1

На странице 2 документации tabularxсказано, что нужно использовать \arraybackslashafter \centering(или \raggedrightor \ragggedleft). Используйте так:

\documentclass{article}
\usepackage{tabularx}
\begin{document}
  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \centering\arraybackslash A & \centering\arraybackslash B \\ \hline
    1.0 & 2.0 \\
  \end{tabularx}
\end{document}

Команды выравнивания текста LaTeX переопределяются \\так, чтобы они больше не означали «новую строку в таблице». \arraybackslashКоманда делает \let\\\tabularnewlineэто, чтобы она снова работала.

В качестве альтернативы вы можете использовать \tabularnewlineвместо \\в конце первого ряда.

\documentclass{article}
\usepackage{tabularx}
\begin{document}
  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \centering A & \centering B \tabularnewline \hline
    1.0 & 2.0 \\
  \end{tabularx}
\end{document}

решение2

Вы можете просто использовать a \multicolumn{1}{c}{...}для заголовков столбцов. Или загрузить makecellи использовать его theadкоманду (по умолчанию ее содержимое центрируется как по горизонтали, так и по вертикали), которая имеет возможность определить общее форматирование всех theadаргументов s. Вот пример обоих методов:

\documentclass{article}
\usepackage{tabularx, makecell, xcolor}
\renewcommand{\theadfont}{\normalsize\bfseries\color{red}}

\begin{document}

  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} \\ \hline
    1.0 & 2.0 \\
  \end{tabularx}
\vspace{4ex}

  \noindent
  \begin{tabularx}{\linewidth}{ X | X }
    \thead{A} & \thead{B} \\ \hline
    1.0 & 2.0 \\
  \end{tabularx}

\end{document} 

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

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