\noalign mal colocado ao centralizar a célula tabularx

\noalign mal colocado ao centralizar a célula tabularx

Eu tenho um documento LaTeX mínimo como este:

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

AB 1,0 2,0

Gostaria de centralizar os cabeçalhos da tabela, mas alinhar as colunas à esquerda. No entanto, quando adiciono \centeringao cabeçalho B, assim:

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

Eu recebo este erro:

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

Responder1

A página 2 da tabularxdocumentação diz que você deve usar \arraybackslashdepois \centering(ou \raggedrightou \ragggedleft). Use assim:

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

Os comandos de alinhamento de texto do LaTeX são redefinidos \\para que não signifiquem mais “uma nova linha na tabela”. O \arraybackslashcomando faz \let\\\tabularnewlineisso para que funcione novamente.

Alternativamente, você pode usar \tabularnewlineem vez de \\no final da primeira linha.

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

Responder2

Você pode simplesmente usar a \multicolumn{1}{c}{...}para os cabeçalhos das colunas. Ou carregue makecelle utilize o seu theadcomando (por padrão, seu conteúdo é centralizado, tanto horizontal quanto verticalmente), que tem a possibilidade de definir uma formatação comum de todos theados argumentos. Aqui está um exemplo de ambos os métodos:

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

insira a descrição da imagem aqui

informação relacionada