我的小演示代码借鉴了这里如下所示(测试文件):
---
documentclass: article
output:
pdf_document:
number_sections: yes
keep_tex: no
geometry: "left = 2.5cm, right = 2cm, top = 2cm, bottom = 2cm"
fontsize: 11pt
header-includes:
- \newtheorem{ex}{Exercise}
- \usepackage[nosolutionfiles]{answers}
- \Newassociation{sol}{Solution}{ans}
- \renewcommand{\Solutionlabel}[1]{\textbf{Answer.}}
---
```{r setup, include = FALSE}
knitr::opts_chunk$set(
error = TRUE,
message = FALSE,
warning = FALSE
)
```
\section{Problems}
\begin{ex}
First exercise
\begin{sol}
First solution.
\end{sol}
\end{ex}
它运行良好。但是,当我在其中插入一些 R 代码块时,例如
\begin{ex}
Second exercise
\begin{sol}
Second solution.
```{r}
1+2
```
\end{sol}
\end{ex}
它显示错误
! You can't use `macro parameter character #' in horizontal mode.
奇怪的是,我们可以在环境之外使用 R 代码\begin{ex}...\end{ex}
块\begin{sol}...\end{sol}
!
如何解决这个问题?
答案1
总和的输出是## [1] 3
并将其包含在 LaTeX 环境中,它作为 markdown 文本传递给 LateX 引擎:
```r
1+2
```
```
## [1] 3
```
结果与在 LaTeX 中输入未转义的“#”时出现相同的致命错误:
\documentclass{article}
\begin{document}
hello #
\end{document}
一个解决方案是不仅指定什么是 R 代码,还要在 markdown 中指定什么是 LaTeX,但是排除里面的 R 块,即:
```{=tex}
\begin{ex}
Second exercise
\begin{sol}
Second solution.
```
```{r}
1+2
```
```{=tex}
\end{sol}
\end{ex}
```
然后处理 R 块并将其传递给 LaTeX 导出: