请考虑以下两个 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
与所有设置列宽的列说明符(p
,m
,b
)一样,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}