我想使用siunitx
包来在文档中写入单位。但是,只需添加以下行:
\usepackage{siunitx}
到文档(甚至没有使用命令siunitx
)给出了 84 个类型的错误:Missing '}'... Missing '$' ... Extra '}' ...
等等。
如果没有此行,文档仍可编译并生成。
我已设法找到导致问题的根源,即 tabularx 内部数学代码的使用。
以下是需要编译的最少代码:
\documentclass[12pt,twoside]{report}
\usepackage{siunitx}
\usepackage{comment}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{s}{>{\hsize=.25\hsize\centering\arraybackslash}X}
\begin{document}
\begin{center}
\begin {table}[h]
\caption{Comparison between bla bla bla}
\centering
{
\renewcommand{\arraystretch}{1.5} % \renewcommand{\arraystretch}{1.5}
\begin{tabularx}{0.95\linewidth} {Y|s}
\hline\hline
column 1 title & column 2 title \tabularnewline % [0.5cm]
\hline%\hline
cell(1,1) & $\textrm{w}_0$ \tabularnewline
%\begin{comment}
cell(2,1) & $\frac{\textrm{w}_0}{\sqrt{2}}\approx 0.7\textrm{w}_0$ \tabularnewline
cell(3,1) & $\frac{\textrm{w}_0}{\sqrt{3}}\approx 0.58\textrm{w}_0$ \tabularnewline
cell(4,1) & $0.5\textrm{w}_0$ \tabularnewline
cell(5,1) & $0.46\textrm{w}_0$ \tabularnewline
\hline
%\end{comment}
\end{tabularx}
}
\label{tab:comparing_table}
\end{table}
%
\end{center}
\end{document}
现在,没有了:\usepackage{siunitx}
上面的表格可以正常编译。问题出在表格内的数学代码上。只有文本的同一张表格也可以正常编译。
我怎样才能保留包含数学运算的表格并siunitx
???
答案1
在我看来,问题出在你的习惯上,columntype
因为对我来说,使用j
而不是可以完美运行。由包保留。s
s
siunitx
\documentclass[12pt,twoside]{report}
\usepackage{siunitx}
\usepackage{comment}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{j}{>{\hsize=.25\hsize\centering\arraybackslash}X}
\begin{document}
\begin{center}
\begin{table}[h]
\caption{Comparison between bla bla bla}
\centering
{
\renewcommand{\arraystretch}{1.5} %
\begin{tabularx}{0.95\linewidth}{Y|j}
\hline\hline
column 1 title & column 2 title \tabularnewline % [0.5cm]
\hline%\hline
cell(1,1) & {$\textrm{w}_0$} \tabularnewline
cell(2,1) & $\frac{\textrm{w}_0}{\sqrt{2}}\approx 0.7\textrm{w}_0$ \tabularnewline
cell(3,1) & $\frac{\textrm{w}_0}{\sqrt{3}}\approx 0.58\textrm{w}_0$ \tabularnewline
cell(4,1) & $0.5\textrm{w}_0$ \tabularnewline
cell(5,1) & $0.46\textrm{w}_0$ \tabularnewline
\hline
\end{tabularx}
}
\label{tab:comparing_table}
\end{table}
\end{center}
\end{document}
答案2
控制台输出(和日志文件)显示
Package array Warning: Column s is already defined on input line 8.
当列类型已经定义时,array
通常会发出警告并覆盖定义。但是 Catch 22 正在等着我们!s
列类型由 定义siunitx
,因此会显示警告,但siunitx
实际上在文档开始时对列类型进行了必要的定义!因此,您最终还是会得到s
由 定义的列类型siunitx
,这会导致错误,因为该列中的输入无效。
如果您不确定覆盖列类型是否安全,请不要这样做。
还有几点需要注意。
永远不要放置
table
在里面center
:这只会在文档中产生不必要的垂直空间,并且表格可能位于或不位于该垂直空间的中间。避免
\begin{table}[h]
希望浮动确实被放置这里。通常不会。LaTeX 会转换[h]
为[ht]
,但大浮点数可能无法在指定位置找到它们的位置,最终会将其和所有后续浮点数延迟到当前章节结束。使用组来局部化的效果
\renewcommand{\arraystretch}{1.5}
是没用的,因为之后无论如何都会恢复原来的值\end{table}
。将您的放在它所属的
\label
旁边。\caption
使用“可变
X
列”的正确方法是使用\hsize=<frac>\hsize
所有分数的总和作为X
列数。在您的例子中,如果第一列的细分为 3/4,第二列的细分为 1/4,则应该是>{\hsize=1.5\hsize}X >{\hsize=0.5\hsize}X
完整的代码,具有booktabs
功能而不是\hline\hline
垂直规则。
\documentclass[12pt,twoside]{report}
\usepackage{siunitx}
\usepackage{comment}
\usepackage{tabularx}
\usepackage{booktabs}
\begin{document}
\begin{table}[htp]
\caption{Comparison between bla bla bla}
\label{tab:comparing_table}
\centering
\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{0.95\linewidth}
{
>{\centering\hsize=1.5\hsize}X
>{\centering\hsize=0.5\hsize}X
}
\toprule
column 1 title & column 2 title \tabularnewline % [0.5cm]
\midrule
cell(1,1) & $\textrm{w}_0$ \tabularnewline
%\begin{comment}
cell(2,1) & $\frac{\textrm{w}_0}{\sqrt{2}}\approx 0.7\textrm{w}_0$ \tabularnewline
cell(3,1) & $\frac{\textrm{w}_0}{\sqrt{3}}\approx 0.58\textrm{w}_0$ \tabularnewline
cell(4,1) & $0.5\textrm{w}_0$ \tabularnewline
cell(5,1) & $0.46\textrm{w}_0$ \tabularnewline
\bottomrule
%\end{comment}
\end{tabularx}
\end{table}
\end{document}
以下是输出
>{\centering}X c
对于色谱柱规格: