使用 tabularx 和 linebreak 居中单元格

使用 tabularx 和 linebreak 居中单元格

我想要居中单元格tabularx 中有手动换行符。我在 stackexchange 和其他 latex 相关页面中搜索了很多,但找不到解决方案

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[]{multirow}
\usepackage[]{MnSymbol}
\usepackage[]{array}
\usepackage{multicol}

\begin{document}

\maketitle

\section{Introduction}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\begin{table}
    \centering
    \begin{tabularx}{1\linewidth}{lX|P{0.2\linewidth}|P{0.2\linewidth}|P{0.2\linewidth}}
        & & \textbf{firmware} & \textbf{bootloader} & \textbf{os} \\
        \multicolumn{2}{l}{\textbf{Target1}} &  &  &  \\
        & {\footnotesize rot\par} & test123 \newline hallo &  {\footnotesize $(\uparrow)$ \newline testtext\par} &  {\footnotesize $(\nearrow)$ \newline hardware\par} \\
        \hline
        \hline
    \end{tabularx}
\end{table}

\end{document}

为什么每个单元格的第一行没有居中对齐?如果单元格内没有换行符,则第一行正确对齐。如何解决这个问题?提前致谢

编辑:我使用 overleaf 和一些其他在线 latex 环境编译了代码,以确保我的环境没有问题 在此处输入图片描述

答案1

之所以不能按预期工作,是因为\centering只有正确工作如果相关文本以\par

\documentclass[border=10pt]{standalone}  
\begin{document}  

\parbox{5cm}{%
\centering This is a line \newline
And this is another line %
}

\parbox{5cm}{%
\centering This is a line \par
And this is another line % (implicit \par at the end of the \parbox)
}

\end{document}

在此处输入图片描述

\centering如果您在列内使用,情况也是如此p,因为这实际上会将 放置\parbox在表格单元格内。因此,\newline您不应在这些单元格内使用,而应使用\par(或输入一个空白行):

\documentclass{article}
\usepackage{tabularx}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}

\begin{document}

\begin{table}
    \centering
    \begin{tabularx}{1\linewidth}{lX|P{0.2\linewidth}|P{0.2\linewidth}|P{0.2\linewidth}}
        & & \textbf{firmware} & \textbf{bootloader} & \textbf{os} \\
        \multicolumn{2}{l}{\textbf{Target1}} &  &  &  \\
        & \footnotesize rot & test123 \par hallo & \footnotesize $(\uparrow)$ \par testtext & \footnotesize $(\nearrow)$ \par hardware \\
        \hline
        \hline
    \end{tabularx}
\end{table}

\end{document}

在此处输入图片描述

我从代码中删除了本示例不需要的所有包,并稍微简化了代码。

答案2

你问,

为什么每个单元格的第一行没有居中对齐?...如何解决这个问题?

恐怕我不能告诉你为什么出现了你遇到的问题,但我可以提出一个解决方案:加载包ragged2e,它提供了一个名为的宏\Centering,并替换

>{\centering\arraybackslash}p{#1}

>{\Centering}p{#1}

在此处输入图片描述

\documentclass{article}

\usepackage{tabularx,ragged2e}
%% 2 ways to create a centered "p"-type column:
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{Q}[1]{>{\Centering}p{#1}}

\usepackage[skip=0.333\baselineskip]{caption} % optional

\begin{document}

\begin{table}[ht]
    \caption*{with \ttfamily >\{\string\centering\string\arraybackslash\}}
    \begin{tabularx}{\linewidth}{ X *{3}{| P{0.2\linewidth}} }
        & \textbf{firmware} & \textbf{bootloader} & \textbf{os} \\ 
        \hline
        Target1 
        & test123 \newline hallo 
        & \footnotesize $(\uparrow)$ \newline testtext 
        & \footnotesize $(\nearrow)$ \newline hardware \\
        \hline
    \end{tabularx}
\end{table}
    
\begin{table}[h]
    \caption*{with \ttfamily >\{\string\Centering\}}
    \begin{tabularx}{\linewidth}{ X *{3}{| Q{0.2\linewidth}} }
        & \textbf{firmware} & \textbf{bootloader} & \textbf{os} \\
        \hline
        Target1
        & test123 \newline hallo
        & \footnotesize $(\uparrow)$ \newline testtext
        & \footnotesize $(\nearrow)$ \newline hardware \\
        \hline
    \end{tabularx}
\end{table}

\end{document} 

答案3

我没有遇到您的代码居中问题,但如果您有最新版本的array,我建议您简化代码,该版本定义了wc{some length}列类型。现在也不需要加载\usepackage[utf8]{inputenc},因为这是 latex 现在默认需要的编码。

    \documentclass{article}
    \usepackage{tabularx}
    \usepackage[]{multirow}
    \usepackage[]{MnSymbol}
    \usepackage[]{array}
    \usepackage{multicol}

    \begin{document}

    %\maketitle

    \section{Introduction}

    \begin{table}
        \centering
        \begin{tabularx}{1\linewidth}{l>{\centering\arraybackslash}X|wc{0.2\linewidth}|wc{0.2\linewidth}|wc{0.2\linewidth}|}
            & & \textbf{firmware} & \textbf{bootloader} & \textbf{os} \\
            \multicolumn{2}{l|}{\textbf{Target1}} & & & \\
            & {\footnotesize rot\par} & test123 \newline hallo & {\footnotesize $(\uparrow)$ \newline testtext\par} & {\footnotesize $(\nearrow)$ \newline hardware\par} \\
            \hline
            \hline
        \end{tabularx}
    \end{table}

    \end{document} 

在此处输入图片描述

相关内容