\noalign mal colocado al centrar la celda tabularx

\noalign mal colocado al centrar la celda tabularx

Tengo un 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

Me gustaría centrar los encabezados de la tabla pero alinear las columnas a la izquierda. Sin embargo, cuando agrego \centeringal encabezado B, así:

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

Recibo este error:

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

Respuesta1

La página 2 de la tabularxdocumentación dice que debe usar \arraybackslashdespués \centering(o \raggedrighto \ragggedleft). Úselo así:

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

Los comandos de alineación de texto de LaTeX se redefinen \\para que ya no signifiquen "una nueva línea en la tabla". El \arraybackslashcomando lo hace \let\\\tabularnewlinepara que vuelva a funcionar.

Alternativamente, puedes usar \tabularnewlineen lugar de \\al final de la primera fila.

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

Respuesta2

Simplemente puede usar a \multicolumn{1}{c}{...}para los encabezados de las columnas. O cargar makecelly usar su theadcomando (por defecto, su contenido está centrado, tanto horizontal como verticalmente), que tiene la posibilidad de definir un formato común para todos theadlos argumentos. A continuación se muestra un ejemplo de ambos 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} 

ingrese la descripción de la imagen aquí

información relacionada