tabularx 中表格单元格的水平填充

tabularx 中表格单元格的水平填充

对于第一列,我希望标题单元格居中,但其他行左对齐,并在其前留出一些空间。如何实现?我可以为表格中多行的同一列定义不同的间距吗?使用的LaTeX列宽规范不应受到干扰。\hsizetabularx

\documentclass[conference]{IEEEtran}
\usepackage{tabularx}
\usepackage{booktabs}

\renewcommand{\tabularxcolumn}[1]{m{#1}}

\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}

\begin{table}[!h]
\renewcommand{\arraystretch}{1.3}
\caption{Comparison of Algorithm Results}
\centering

\begin{tabularx}{\columnwidth}
{ @{\hspace{.2em}} >{\hsize=1.5\hsize}L *{4}{>{\hsize=0.875\hsize}C} @{} }
\toprule
\centering\arraybackslash\textbf{Optimization Algorithm} & \textbf{Swarm Size} & \textbf{No. of Iterations} & \textbf{Final Wirelength} & \textbf{Best Value Cost Fn.}\\
\midrule
\hspace{.5em} Short Text                      & 10    & 1000  & 100   & --    \\
\hspace{.5em} Slightly Longer Text that Wraps & 20    & 2000  & 200   & 10.5  \\
\hspace{.5em} Slightly Longer Text that Wraps & 30    & 3000  & 300   & 20.55 \\
\hspace{.5em} Short                           & 40    & 4000  & 400   & 30.5  \\
\bottomrule
\end{tabularx}

\end{table}

\end{document}

MWE 输出

编辑:因为我的问题被误解了,所以我要重申一下,我想要的是一些替代方案\hspace在之前增加空间的替代方案每一个段落中的行,以及无缩进第一行。或者缩进所有行如下图所示,我希望所有文本都立即从红线右侧开始。我的问题是文本换行的地方,\hspace我无法在那里提供帮助。

在文本换行后手动添加空格不是一个可接受的解决方案。我想要自动单元格填充或者段落填充/重塑会影响段落的所有行。

所需输出提示

答案1

以下解决方案利用tabularx环境、S数据列中的数字的列类型以及X数据列上方标题单元格的修改后的列类型。它还自动缩进左侧描述符列中的第一行。

在此处输入图片描述

\documentclass[conference]{IEEEtran}
\usepackage{tabularx,booktabs,siunitx}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand\mC[1]{\multicolumn{1}{>{\hsize=0.875\hsize}C}{#1}} % handy shortcut macro

\begin{document}

\begin{table}[!h]
\renewcommand{\arraystretch}{1.3}
\caption{Comparison of Algorithm Results}
%%\centering % not needed

\begin{tabularx}{\columnwidth}{@{} 
     >{\hspace{0.75em}\hsize=1.5\hsize}L 
     S[table-format=2.0]
     S[table-format=4.0]
     S[table-format=3.0]
     S[table-format=2.2] @{}}
\toprule
\multicolumn{1}{@{}>{\hsize=1.5\hsize}C}{\textbf{Optimization Algorithm}} & 
\mC{\textbf{Swarm Size}} & 
\mC{\textbf{No.\ of Iterations}} & 
\mC{\textbf{Final Wirelength}} & 
\mC{\textbf{Best Value Cost Fn.}}\\
\midrule
Short Text                      & 10 & 1000 & 100 & {--} \\
Slightly Longer Text that Wraps & 20 & 2000 & 200 & 10.5 \\
Slightly Longer Text that Wraps & 30 & 3000 & 300 & 20.55\\
Short                           & 40 & 4000 & 400 & 30.5 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document} 

附录以回应原帖作者的后续询问:如果您想要在表格的左边缘填充一定量的空白,则以下代码可能会相关:

在此处输入图片描述

\documentclass[conference]{IEEEtran}
\usepackage{tabularx,booktabs,siunitx}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand\mC[1]{\multicolumn{1}{>{\hsize=0.875\hsize}C}{#1}} % handy shortcut macro

\begin{document}
\begin{table}[!h]
\renewcommand{\arraystretch}{1.3}
\setlength\tabcolsep{2pt}  % default value: 6pt
\caption{Comparison of Algorithm Results}\label{tab:alg_results}

\begin{tabularx}{\columnwidth}{@{\hspace{1.3em}} % choose amount of indentation
     >{\hsize=1.5\hsize}L 
     S[table-format=2.0]
     S[table-format=4.0]
     S[table-format=3.0]
     S[table-format=2.2] @{}}
\toprule
%% disable left-hand padding in first cell via "@{}" particle
\multicolumn{1}{@{}>{\hsize=1.5\hsize}C}{\textbf{Optimization Algorithm}} & 
\mC{\textbf{Swarm Size}} & 
\mC{\textbf{No.\ of Iterations}} & 
\mC{\textbf{Final Wirelength}} & 
\mC{\textbf{Best Value Cost Fn.}}\\
\midrule
Short Text                      & 10 & 1000 & 100 & {--} \\
Slightly Longer Text that Wraps & 20 & 2000 & 200 & 10.5 \\
Slightly Longer Text that Wraps & 30 & 3000 & 300 & 20.55\\
Short                           & 40 & 4000 & 400 & 30.5 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document} 

答案2

在此处输入图片描述

\documentclass[conference]{IEEEtran}
\usepackage{siunitx}
\usepackage{booktabs, makecell, tabularx}
    \renewcommand\theadfont{\bfseries}

%\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}

\begin{table}[!h]
\caption{Comparison of Algorithm Results}
    \renewcommand{\arraystretch}{1.1}
    \setlength\tabcolsep{3pt}
    \centering
\begin{tabularx}{\columnwidth}{@{}L S[table-format=2.0]
                                 S[table-format=4.0]
                                 S[table-format=3.0]
                                 S[table-format=2.2]@{}}
    \toprule
\thead[b]{Optimization\\ Algorithm} 
        &   {\thead[b]{Swarm\\ Size}} 
            &   {\thead[b]{No. of\\ Iterations}} 
                &   {\thead[b]{Final\\ Wire\\ length}} 
                    &   {\thead[b]{Best Value\\ Cost Fn.}}      \\
    \midrule
Short Text                      & 10    & 1000  & 100   & {--}  \\
Slightly Longer Text that Wraps & 20    & 2000  & 200   & 10.5  \\
Slightly Longer Text that Wraps & 30    & 3000  & 300   & 20.55 \\
Short                           & 40    & 4000  & 400   & 30.5  \\
    \bottomrule
\end{tabularx}
\end{table}

与您的 MWE 相比,上述有两个主要变化:

  • 对于列头,使用\thead来自makecell包的宏(已添加到序言中)
  • 对于数字列,使用S来自包的列类型siunitx(也添加到序言中)

除了这些变化之外,我还减少arraystretch和删除了对列类型tabcolsep的更改。X

相关内容