cellspace、tabularx 和 siunitx:列说明符“CX”不起作用

cellspace、tabularx 和 siunitx:列说明符“CX”不起作用

请考虑以下两个 mwe:

首先:

\documentclass{article}
\usepackage{siunitx}
\usepackage{cellspace}
\setlength\cellspacetoplimit{5pt}
\setlength\cellspacebottomlimit{5pt}
\addparagraphcolumntypes{X}
\usepackage{tabularx}

\begin{document}
\begin{tabularx}{3cm}{X Cc c}
    \hline
A   &   123   &   456   \\
    \hline
\end{tabularx}
\end{document}

第二:

\documentclass{article}
\usepackage{siunitx}
\usepackage{cellspace}
\setlength\cellspacetoplimit{5pt}
\setlength\cellspacebottomlimit{5pt}
\addparagraphcolumntypes{X}
\usepackage{tabularx}

\begin{document}
\begin{tabularx}{3cm}{CX c c}
    \hline
A   &   123   &   456   \\
    \hline
\end{tabularx}
\end{document}

第一个按预期工作,第二个抛出错误:

! Package array error: Illegal pream-token (\ecolumn): `c' used.

显然说明符CX没有按我预期的那样工作。我做错了什么?

答案1

与所有设置列宽的列说明符(pmb)一样,X列类型需要一对括号:

\documentclass{article}
\usepackage{siunitx}
\usepackage{cellspace}
\setlength\cellspacetoplimit{25pt}
\setlength\cellspacebottomlimit{25pt}
\addparagraphcolumntypes{X}
\usepackage{tabularx}

\begin{document}

\begin{tabularx}{3cm}{C{X} c c}
    \hline
A & 123 & 456 \\
    \hline
\end{tabularx}

\end{document} 

在此处输入图片描述

编辑:@UlrikeFischer 的回答提醒了我cellspace现在可以通过包的一个选项来更改预说明符,这样你就不再依赖siunitx补丁了:如果删除了 siunitx 中与单元格空间有关的部分,那么使用,比如说:

\usepackage[column=O]{cellspace}

您可以将其用作{OX c c}表格的序言,无需括号X(已测试)。

答案2

siunitx 用于将 cellspace 列类型从 S 更改为 C 的代码似乎有问题。如果让 cellspace 更改名称并欺骗 siunitx,使其不干扰,它就会再次正常工作:

\documentclass{article}

\usepackage[column=C]{cellspace}
\setlength\cellspacetoplimit{5pt}
\setlength\cellspacebottomlimit{5pt}
\addparagraphcolumntypes{X}
\usepackage{tabularx}
\usepackage{siunitx}

\usepackage{etoolbox}
\cslet{[email protected]}{\somethingundefined} %fool siunitx 
\begin{document}
\begin{tabularx}{3cm}{CX c c}
    \hline
A   &   123   &   456   \\
    \hline
\end{tabularx}
\end{document}

相关内容