Rmarkdown 正在编织的 PDF 中打印乳胶代码
Rmarkdown is printing the latex code in the knited PDF
我 运行 结果很奇怪。我在 Rmarkdown 的文档中插入了一些 table 。这是 YAML:
---
output:
pdf_document:
toc: true
toc_depth: 2
number_sections: true
header-includes:
\usepackage{float}
\floatplacement{figure}{H}
\floatplacement{table}{H}
---
第一个块:
{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
fig.pos = "H",
fig.width=8,
fig.height=7,
tab.pos = "H",
collapse = TRUE,
message = FALSE,
warning = FALSE,
comment = "#>"
)
knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())
options(knitr.kable.NA = "-")
table的插入方式是这样的:
kable(tableX, caption = "Caption", booktabs = TRUE) %>%
row_spec(0, bold=TRUE) %>%
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
现在,大多数 tables 都被正确插入,但只有一个是用乳胶代码打印的,\begin{table},然后是 \caption{},然后是 table,最后是 \end{table}。怎么可能这样打印一个table,而且代码是一样的?
谢谢
当输出选项设置为pdf_document
时,R markdown会生成latex代码(可以通过选择选项keep_tex
并检查生成的.tex
文件来查看latex代码)或者当输出设置为 latex_fragment
.
knitr::kable
输出 table 的完整乳胶输出(当处于 tex 模式时),但会消耗任何字面提供的标题。 knitr 解释器然后使用生成的乳胶块。当在 \begin
和 \end
环境语句之间的某处产生非法内容时(例如其中带有未转义的 %
的标题),解释器反而会产生转义的乳胶代码。
有效代码
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(tableX, caption = "Caption 20pct", booktabs = TRUE) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```
按预期生成乳胶代码:
\begin{table}
\caption{\label{tab:tab1}Caption 20pct}
\centering
\begin{tabular}[t]{>{}l}
\toprule
\textbf{col1}\
\midrule
\em{Empty data frame}\
\bottomrule
\end{tabular}
\end{table}
但是当 %
添加到标题时,乳胶代码生成中断。代码块
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(tableX, caption = "Caption 20%", booktabs = TRUE) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```
产生
\textbackslash begin\{table\}
\textbackslash caption\{\label{tab:tab1}Caption 20\%\} \centering
\begin{tabular}[t]{>{}l}
\toprule
\textbf{col1}\
\midrule
\em{Empty data frame}\
\bottomrule
\end{tabular}
\textbackslash end\{table\}
它只是在 pdf 中呈现为文字乳胶代码。
正如 rmarkdown 的作者 Yihui Xie 所指出的 here,您可以在 kable()
中禁用 character-escaping 参数以在 table 标题中包含 LaTeX 的空格字符,或者column/row 个名字,或两者。然后你需要通过在每个特殊字符前添加 \
来手动转义这些字符。
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(
tableX,
caption = "Caption 20\%",
booktabs = TRUE,
escape = FALSE
) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```
我 运行 结果很奇怪。我在 Rmarkdown 的文档中插入了一些 table 。这是 YAML:
---
output:
pdf_document:
toc: true
toc_depth: 2
number_sections: true
header-includes:
\usepackage{float}
\floatplacement{figure}{H}
\floatplacement{table}{H}
---
第一个块:
{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
fig.pos = "H",
fig.width=8,
fig.height=7,
tab.pos = "H",
collapse = TRUE,
message = FALSE,
warning = FALSE,
comment = "#>"
)
knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())
options(knitr.kable.NA = "-")
table的插入方式是这样的:
kable(tableX, caption = "Caption", booktabs = TRUE) %>%
row_spec(0, bold=TRUE) %>%
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
现在,大多数 tables 都被正确插入,但只有一个是用乳胶代码打印的,\begin{table},然后是 \caption{},然后是 table,最后是 \end{table}。怎么可能这样打印一个table,而且代码是一样的?
谢谢
当输出选项设置为pdf_document
时,R markdown会生成latex代码(可以通过选择选项keep_tex
并检查生成的.tex
文件来查看latex代码)或者当输出设置为 latex_fragment
.
knitr::kable
输出 table 的完整乳胶输出(当处于 tex 模式时),但会消耗任何字面提供的标题。 knitr 解释器然后使用生成的乳胶块。当在 \begin
和 \end
环境语句之间的某处产生非法内容时(例如其中带有未转义的 %
的标题),解释器反而会产生转义的乳胶代码。
有效代码
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(tableX, caption = "Caption 20pct", booktabs = TRUE) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```
按预期生成乳胶代码:
\begin{table}
\caption{\label{tab:tab1}Caption 20pct}
\centering
\begin{tabular}[t]{>{}l}
\toprule
\textbf{col1}\
\midrule
\em{Empty data frame}\
\bottomrule
\end{tabular}
\end{table}
但是当 %
添加到标题时,乳胶代码生成中断。代码块
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(tableX, caption = "Caption 20%", booktabs = TRUE) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```
产生
\textbackslash begin\{table\}
\textbackslash caption\{\label{tab:tab1}Caption 20\%\} \centering
\begin{tabular}[t]{>{}l}
\toprule
\textbf{col1}\
\midrule
\em{Empty data frame}\
\bottomrule
\end{tabular}
\textbackslash end\{table\}
它只是在 pdf 中呈现为文字乳胶代码。
正如 rmarkdown 的作者 Yihui Xie 所指出的 here,您可以在 kable()
中禁用 character-escaping 参数以在 table 标题中包含 LaTeX 的空格字符,或者column/row 个名字,或两者。然后你需要通过在每个特殊字符前添加 \
来手动转义这些字符。
```{r tab1, echo=F}
tableX=data.frame(col1 = "Empty data frame")
kable(
tableX,
caption = "Caption 20\%",
booktabs = TRUE,
escape = FALSE
) |>
row_spec(0, bold=TRUE) |>
kable_styling(bootstrap_options = "condensed") %>%
column_spec(1, italic = TRUE)
```