我有 R 代码,可以生成如下乳胶代码:
\begin{tabular}{D{.}{.}{7}D{.}{.}{7}}
\toprule
\multicolumn{1}{c}{x} & \multicolumn{1}{c}{y} \\
\midrule
[1, 5) & 1 \\
[1, 5) & 2 \\
[5, 8) & 5 \\
[5, 8) & 7 \\
[8,10] & 8 \\
[8,10] & 10 \\
\bottomrule
\end{tabular}
这会产生数学错误:
! LaTeX Error: Bad math environment delimiter.
我该如何防止这种情况发生?我希望方括号按原样打印,因为它们代表间隔 - 以前在办公室里已经完成了切换到 { 的解决方法,但看起来很糟糕!
我读过一些资料,但没有看到任何关于防止 latex 进入数学模式的具体内容。不过,我对此并不熟悉,所以我可能使用了错误的关键字!
例子
我正在使用以下参数在 knitr chunks 中生成代码:
<<tab-example,echo=FALSE,cache=FALSE,results='asis'>>=
example<-data.frame(cbind(x=1:10,y=1:10))
example$x<-cut(example$x,3)
toLatex(example)
@
当前使用的软件包
\usepackage{fancyhdr,dcolumn,booktabs,float,titlesec}
\usepackage[margin=0.7in]{geometry}
\usepackage[us,12hr]{datetime}
答案1
您对(片段)的使用
%...
[1, 5) & 2 \\
[5, 8) & 5 \\
%...
(视觉上)被解释为
%...
& 1 \\[1, 5)
& 2 \\[5, 8)
& 5 \\[5, 8)
%...
因为 LaTeX 要求可选参数 after\\
包含长度/维度。最简单的解决方法是插入非[
after \\
,例如{}
(一个空组)。例如:
\begin{tabular}{D{.}{.}{7}D{.}{.}{7}}
\toprule
\multicolumn{1}{c}{x} & \multicolumn{1}{c}{y} \\
\midrule
{}[1, 5) & 1 \\
{}[1, 5) & 2 \\
{}[5, 8) & 5 \\
{}[5, 8) & 7 \\
{}[8,10] & 8 \\
{}[8,10] & 10 \\
\bottomrule
\end{tabular}
第一个{}
不是需要的,但是我将其插入以使代码看起来一致。
答案2
作为@Werner 出色解释的后续,当我使用 RI 时,创建了一个sanitise
函数来代替默认xtable::sanitize
函数,以适当地转义这些内容。
包裹奥普蒂朗姆酒即可下载sanitise
使用相应功能。