exams2pdf转换含URL链接的RMD文件报错,求解决方案
问题描述
我在RMD文件q1.rmd中使用标准Markdown语法添加链接,代码如下:
```{r data generation, echo = FALSE, results = "hide"} knitr::opts_chunk$set(echo = FALSE) options(scipen=100) x = sample(1:6,10,TRUE)
Question
Find the sample mean.
r x
Solution
r mean(x)
Meta-information
extype: num
exsolution: r mean(x)
exname: find mean
运行`exams2pdf("q1.rmd")`后出现如下错误: > ! Undefined control sequence. > l.3 Find the \href > {https://en.wikipedia.org/wiki/Sample_mean_and_covariance%5C%5C... > > Error: LaTeX failed to compile plain1.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See plain1.log for more info. 我的大量问题中都包含链接,需要简便的解决方案避免`exams2pdf`失效。 # 解决方案 错误根源是:`exams2pdf`生成的LaTeX代码使用了`\href`命令,但默认的LaTeX模板没有加载`hyperref`包(该包负责解析`\href`实现链接功能)。以下是几种简便解决方法: ## 方法一:调用`exams2pdf`时指定加载`hyperref`包 直接在调用命令中通过`header`参数添加LaTeX包引用,无需修改RMD文件: ```r exams2pdf("q1.rmd", header = "\\usepackage{hyperref}")
该参数会将指定的LaTeX命令插入到生成的.tex文件的导言区,支持所有Markdown链接转换为LaTeX可识别的格式。
方法二:在RMD文件开头添加LaTeX命令
如果需要单个RMD文件独立支持链接,可在文件最开头(代码块之前)添加raw LaTeX命令:
\usepackage{hyperref}
exams会自动将该命令纳入LaTeX导言区,确保\href命令可被解析。
方法三:自定义模板(适合大量问题场景)
如果有大量问题需要处理,建议自定义包含hyperref的LaTeX模板,后续所有调用统一使用该模板:
- 复制
exams包默认的plain.tex模板(可通过system.file("templates", "plain.tex", package = "exams")找到路径) - 在模板的导言区(
\begin{document}之前)添加\usepackage{hyperref} - 调用
exams2pdf时指定模板:
exams2pdf(c("q1.rmd", "q2.rmd", ...), template = "my_custom_template.tex")
内容的提问来源于stack exchange,提问作者Chad Worley
相关产品推荐
相关产品推荐

