首页 > 解决方案 > 将 RMarkdown 渲染为 .pdf 时对底层 LaTeX 进行中间修改

问题描述

我正在创建一个小包,用于生成带有随机排序问题的考试(以及对多项选择项的回答),并且 R 部分运行良好,但现在我需要对渲染 .pdf 时创建的生成的 LaTeX 进行更多控制.

这是我的问题:问题及其相应的响应项可以跨多个页面拆分,这并不理想。我通过将问题项封装在minipage. 原始.tex文件如下所示:

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  Which bear is best?

  A. Teddy bear\\
  B. Black bear\\
  C. Grizzly bear\\
  D. Honey bear\\
  E. Polar bear

\item
  Which beer is best?

  A. Miller Lite\\
  B. Naturdays\\
  C. Leine's\\
  D. Hamm's\\
  E. PBR
\end{minipage}

我的minipage解决方案是做这样的事情:

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\begin{minipage}{\linewidth}
\item
  Which bear is best?

  A. Teddy bear\\
  B. Black bear\\
  C. Grizzly bear\\
  D. Honey bear\\
  E. Polar bear
\end{minipage}
\begin{minipage}{\linewidth}
\item
  Which beer is best?

  A. Miller Lite\\
  B. Naturdays\\
  C. Leine's\\
  D. Hamm's\\
  E. PBR
\end{minipage}

问题是我不知道如何在一步过程中使用 RMarkdown 和 R 来做到这一点。理想情况下,用户将拥有一个 .Rmd 文件,他们只需在其中执行类似...

---
title: Some test
output: pdf_document
---

```{r}
library(examgen)

output_questions("/path/to/questions.json")
```

并且 LaTeX 将被适当地格式化,但我认为这不仅仅是包含自定义.tex文件的问题(我在这里可能错了)。我可以很容易地创建一个 shell 脚本,将minipagess 插入到适当的位置,然后再次渲染一个 .pdfpdflatex或正在使用的任何东西,但显然这不是最用户友好的。我也希望这个包也能够输出 .html。

如果相关,我可以提供有关 R 代码的更多详细信息。

编辑

我为这个问题创建了我的 git repo 的一个分支,这样你就可以准确地看到我正在处理的内容:

# clone the repo for access to example .Rmd and data
git clone -b se-question https://gitlab.com/mhaffner/examgen.git

# install the package
Rscript -e "devtools::install('examgen/R')"

# render rmarkdown
Rscript -e "rmarkdown::render('examgen/examples/exam-template.Rmd')"

然后您可以查看文件examples/exam-template.texexamples/exam-template.pdf.

编辑 2

这是一个更简单的示例,它绕过了包装,但触及了问题的根源:

---
title: "Exam Title"
author: "Your name here"
date: "November 21, 2019"
output:
  pdf_document:
    keep_tex: true
fontsize: 12pt
geometry: margin=1in
---

```{r results = "asis", echo = FALSE}
question <- c("1. Which beer is best?\n
\tA. Miller Lite\n
\tB. Hamm's\n")

cat(question)
cat("\n")
cat(question)
cat("\n")
```

把它放在 .Rmd 中,渲染它,然后查看生成的 .tex 和 .pdf。

标签: rlatexr-markdownpdflatex

解决方案


推荐阅读