Таблица: Автоматическая ширина столбца по вертикали и горизонтали, выравнивание по центру

Таблица: Автоматическая ширина столбца по вертикали и горизонтали, выравнивание по центру

Я пытаюсь найти метод, который позволит мне иметь столбцы с автоматической шириной, которые также центрируются по горизонтали и вертикали, точно так же, как tabularxтип Xстолбцов просто центрируется.

Итак, вот что я попробовал на данный момент:

\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{Z}[0]{>{\centering\arraybackslash\let\newline\\\hspace{0pt}}X}%
\begin{document}
\begin{table}
\begin{tabularx}{7cm}{l|X|X}
& long\newline heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{7cm}{l|Z|Z}
& long\linebreak heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\end{document}

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

Второе уже почти то, что я хочу, только вертикального центрирования третьего столбца не хватает. Как это исправить?

решение1

для вертикального центрирования вам нужна mколонна, а не pстолбец, который будет располагаться позадиX

\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{Z}[0]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X}%
\renewcommand\tabularxcolumn[1]{m{#1}}
\begin{document}
\begin{table}
\begin{tabularx}{7cm}{l|X|X}
& long\newline heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{7cm}{l|Z|Z}
& long\linebreak heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\end{document}

решение2

Просто используйте makecellпакет и его \theadкоманду:

        \documentclass{article}
        \usepackage{tabularx,booktabs, makecell}
        \newcolumntype{Z}[0]{>{\centering\arraybackslash\let\newline\\\hspace{0pt}}X}%

        \begin{document}

        \begin{table}
        \begin{tabularx}{7cm}{l|X|X}
        &\thead{ long\\ heading 1} & \thead{short heading}\\
        \toprule
        row 1 & 2314 & 2134
        \end{tabularx}
        \end{table}

        \begin{table}
        \begin{tabularx}{7cm}{l|Z|Z}
        &\thead{long\\ heading 1} & \thead{short heading}\\
        \toprule
        row 1 & 2314 & 2134
        \end{tabularx}
        \end{table}

        \end{document} 

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

Обратите внимание, что с помощью makecell вы можете легко форматировать содержимое ячеек head. Позвольте мне указать, что вам не следует использовать вертикальные линии с booktabs: как вы можете видеть, они не обрезают горизонтальные.

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