在xtable中处理Latex反斜杠

28

我有一个包含以下列的表:

 mytable <- data.frame(beta_0 = c(1,2,3)

我想要做的是使用latex标记输出一个表格列标题,例如$\beta_0$

然而,我似乎无法找出如何使用print.xtable输出"$\beta_0$"。

colnames(mytable) <- "$\beta_0$"
library(xtable)
print(xtable(mytable), include.rownames = F)

返回一个列标题

\eta\_0\$
代替
$\beta_0$

我认为答案是"sanitize.colnames.function"参数,用于print.xtable,但我不确定如何使用它,?print.xtable没有提供示例。

具体而言,我想输出像这样的LaTeX表格:

\begin{table}[ht]
 \begin{center}
  \begin{tabular}{r}
    \hline
    $\beta_0$ \\ 
    \hline
    1.00 \\ 
    2.00 \\ 
    3.00 \\ 
    \hline
  \end{tabular}
 \end{center}
\end{table}

参见:https://dev59.com/SY_ea4cB1Zd3GeqPQ6Ec - landroni
2个回答

33

这里有两个问题;首先,你需要双反斜杠,否则它会将其视为控制序列。其次,默认情况下,xtable 会对文本进行清理,以避免破坏 LaTeX。使用其中一个 sanitize. 参数来控制此行为;要不进行清理,请将身份函数传递给它。

colnames(mytable) <- "$\\beta_0$"
print(xtable(mytable), include.rownames = F, sanitize.colnames.function = identity)

我曾尝试过双反斜杠,但是 sanitize.colnames.function 让我感到困惑。是否有可能值的列表可以用于 sanitize* 参数? - David LeBauer
1
@David,sanitize参数的可能值列表不存在。正如文档中明确说明的那样:它应该是一个接受字符向量并返回一个字符向量的函数,并将用于替代默认内部函数进行清理。Aaron只是传递了一个什么也不做的函数identity - joran
它可以使用任何适当的函数。identity是一个基本函数,什么也不做。 - Aaron left Stack Overflow
明白了:identity <- function(x)x。@joran 我看到了那部分,我很想知道是否有特定的函数可以特别方便地解析 "" 和其他 LaTeX 标记。但是 identity 已经解决了我的当前问题。 - David LeBauer
1
我不知道还有什么其他特定的函数存在;当我需要更复杂的东西时,我会从xtable中的默认函数开始,并修改它以满足我的需求。 - Aaron left Stack Overflow
7
@David,你可以随时在源代码中使用grep命令查找“sanitize”参数的列表:它们是“sanitize.rownames.function”,“sanitize.colnames.function”,“sanitize.text.function”,并且可以使用“options”设置,而不是作为打印函数的参数,例如,“options(xtable.sanitize.rownames.function=identity)”。 - cboettig

3

这是我成功的关键:

mat <- round(matrix(c(0.9, 0.89, 200, 0.045, 2.0), c(1, 5)), 4)
rownames(mat) <- "$y_{t-1}$"
colnames(mat) <- c("$R^2$", "$\\bar{x}$", "F-stat", "S.E.E", "DW")
mat <- xtable(mat)
print(mat, sanitize.text.function = function(x){x})

这样可以避免表格文本中的反斜杠问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接