使用Quarto生成含/无答案双版本教程文档的方法问询
Quarto生成带/不带答案双版本教程的最简方案
问题背景
我用Quarto制作包含大量LaTeX内容的教程,希望基于同一文档生成带答案和不带答案的两个版本,避免维护两份文件导致内容不一致。尝试过三种方法均未成功:
.content-visible区块:仅能切换输出格式,无法通过布尔值控制内容显示- R代码块:直接在代码块中写文本报错,且LaTeX公式无法渲染
- Lua过滤器:答案区块内的LaTeX公式无法正常渲染
最简实现方法
方法1:参数化R代码块(适合零散答案)
无需额外脚本,直接利用Quarto参数控制输出:
- 在文档开头的YAML配置中添加参数:
--- title: "带条件答案的教程" format: pdf params: show_answers: true # 设为false生成无答案版本 ---
- 用R代码块包裹答案内容,通过
eval参数控制是否显示,注意用cat()输出文本并开启output="asis":
```{r, eval = params$show_answers, echo = FALSE, output = "asis"} cat("**答案:** $n^2$的泊松概率值为", dpois(2, 1), "。")
当`params$show_answers`为`true`时显示答案,`false`时自动隐藏,LaTeX公式可正常渲染。 ### 方法2:自定义环境+Lua过滤器(适合批量答案区块) 如果有大量独立的答案区块,用Lua过滤器更高效,修正过滤器写法即可: 1. 创建`hide-answer.lua`文件,内容如下: ```lua function Div(el) if el.classes:includes("answer") then local hide_answer = quarto.doc.metadata["hide-answer"] or true if hide_answer then return pandoc.Null() end end return el end
- 在文档YAML中配置过滤器和控制参数:
--- title: "Conditional Content" format: pdf hide-answer: false # 设为true隐藏所有答案区块 filters: - hide-answer.lua ---
- 用
::: {.answer}包裹答案内容,注意区块内格式规范:
- **Question:** What is my name? ::: {.answer} - 答案:我的名字是XXX,这里的$n^2$公式可正常渲染 :::
切换hide-answer参数即可一键生成带/不带答案的版本,LaTeX公式渲染正常。
内容的提问来源于stack exchange,提问作者blahblah4252
相关产品推荐
相关产品推荐

