向 modelsummary 中的表格添加 LaTeX 参考标签

问题描述 投票:0回答:1

我正在尝试使用 modelsummary 在 R 中(不是 RMarkdown,因为

这个问题
有助于回答)生成表格,并且我很难添加 reference 标签(例如,
tab:hello
)。正如 Vincent 在 this answer 中指出的,
modelsummary
的额外参数应该自动推送,但这似乎不适用于 LaTeX 标签。这是一个例子:

library(modelsummary)
library(kableExtra)

x <- rnorm(100)
y <- rnorm(100)

modelsummary(lm(y ~ x),
             output = "latex",
             caption = "test",
             label = "hello")

这会产生:

\begin{table}
\caption{test}
\centering
\begin{tabular}[t]{lc}
\toprule
  & Model 1\\
\midrule
(Intercept) & \num{-0.143}\\
 & (\num{0.100})\\
x & \num{-0.023}\\
 & (\num{0.092})\\
\midrule
Num.Obs. & \num{100}\\
R2 & \num{0.001}\\
R2 Adj. & \num{-0.010}\\
AIC & \num{283.4}\\
BIC & \num{291.2}\\
Log.Lik. & \num{-138.698}\\
F & \num{0.061}\\
\bottomrule
\end{tabular}
\end{table}

同时,通过调用

kable
:

可以正常工作
df <- cbind.data.frame(x, y)
kable(head(df), "latex",
      caption = "test",
      label = "hello")

产生:

\begin{table}
\caption{\label{tab:hello}test}
\centering
\begin{tabular}[t]{r|r}
\hline
x & y\\
\hline
0.8078318 & -0.0219732\\
\hline
0.4660209 & -0.9973773\\
\hline
-1.0620694 & -0.1360954\\
\hline
0.5639881 & 0.0185161\\
\hline
0.3459854 & 0.1333345\\
\hline
-0.8035314 & -0.0759982\\
\hline
\end{tabular}
\end{table}

奇怪的是,这仅在指定标题时才有效。仅在 label

 中定义 
kable
 不会生成标签。

理想情况下,我只想生成一个标签,但如果我也必须添加标题,我可以处理这个问题(因为这似乎也是

kable

 的问题——或者只是 LaTeX 的问题一般表格)。

提前感谢您的帮助!非常感谢。

r knitr kable kableextra modelsummary
1个回答
3
投票
我相信这是 LaTeX 本身的限制,它需要一个标题来正确的表格编号和引用。请参阅此答案以进行讨论和替代机制:

https://tex.stackexchange.com/a/438267/16188

除此之外,我认为值得注意的是,这不是一个

modelsummary

 特有的问题。如您所知,
modelsummary
支持多种可生成不同输出格式的制表包:
kableExtra
gt
flextable
huxtable
。 LaTeX 的默认制表器是 
kableExtra

这是

kableExtra

 中重现相同问题的最小示例:

library(kableExtra) dat <- mtcars[1:3, 1:3]
没有出现标签:

kbl(dat, format = "latex", label = "fig:test") |> kable_styling() #> \begin{table} #> \centering #> \begin{tabular}[t]{l|r|r|r} #> \hline #> & mpg & cyl & disp\\ #> \hline #> Mazda RX4 & 21.0 & 6 & 160\\ #> \hline #> Mazda RX4 Wag & 21.0 & 6 & 160\\ #> \hline #> Datsun 710 & 22.8 & 4 & 108\\ #> \hline #> \end{tabular} #> \end{table}
出现标签:

kbl(dat, format = "latex", caption = "", label = "fig:test") |> kable_styling() #> \begin{table} #> #> \caption{\label{tab:fig:test}} #> \centering #> \begin{tabular}[t]{l|r|r|r} #> \hline #> & mpg & cyl & disp\\ #> \hline #> Mazda RX4 & 21.0 & 6 & 160\\ #> \hline #> Mazda RX4 Wag & 21.0 & 6 & 160\\ #> \hline #> Datsun 710 & 22.8 & 4 & 108\\ #> \hline #> \end{tabular} #> \end{table}
无论如何,在 

modelsummary

 中,我倾向于将标题直接嵌入到 
title
 参数中,使用 
\\
 来“转义”反斜杠。例如:

library(modelsummary) mod <- lm(mpg ~ hp, mtcars) modelsummary(mod, title = "\\label{fig:test}", output = "latex", escape = FALSE) #> \begin{table} #> #> \caption{\label{fig:test}} #> \centering #> \begin{tabular}[t]{lc} #> \toprule #> & Model 1\\ #> \midrule #> (Intercept) & \num{30.099}\\ #> & (\num{1.634})\\ #> hp & \num{-0.068}\\ #> & (\num{0.010})\\ #> \midrule #> Num.Obs. & \num{32}\\ #> R2 & \num{0.602}\\ #> R2 Adj. & \num{0.589}\\ #> AIC & \num{181.2}\\ #> BIC & \num{185.6}\\ #> Log.Lik. & \num{-87.619}\\ #> F & \num{45.460}\\ #> RMSE & \num{3.86}\\ #> \bottomrule #> \end{tabular} #> \end{table}
    
© www.soinside.com 2019 - 2024. All rights reserved.