latex - 我可以在 R/exams 中包含带有exams2pdf 和exams2moodle 输出的pstricks 代码吗?
问题描述
我正在尝试在 R/exams .Rmd 练习中包含以下 pstricks 代码片段,但我不知道该怎么做:
\\begin{pspicture}(-2, -2)(3, 3)
\\psset{viewpoint=100 30 20,Decran=100}
\\psSolid[object=cube, a=2,
action=draw*,
fillcolor = magenta!20
]
\\axesIIID[showOrigin=false, labelsep=5pt](1,1,1)(3,2,2)
\\end{pspicture}
\\begin{tikzpicture}
\\draw[<->] (0, 0) -- (5, 5);
\\end{tikzpicture}
解决方案
是的,这是可能的,尽管我不建议这样做。您可以使用以下内容:
- 使用包含 pstricks 的 LaTeX 代码设置字符串。
- 调用
tex2image(..., packages = c("auto-pst-pdf", ...))
以便使用 LaTeX 包 {auto-pst-pdf}。这支持通过在后台为图形调用 LaTeX 将 pstricks 嵌入 pdfLaTeX 的文档中。 - 确保
tex2image()
使用该选项调用 pdfLaTeX,-shell-escape
以便允许 pdfLaTeX 调用 LaTeX。这通过使用 R 包相对容易tinytex
。
下面包含此策略的一个工作示例,称为dist4.Rmd
. 如果将 R/Markdown 代码复制到文件中,则可以运行:
exams2html("dist4.Rmd")
同样可以在exams2moodle()
. 该练习的灵感来自于 R/exams 中现成的dist、dist2、dist3练习模板。与这些在 R 中绘制图形的模板相比,这个dist4.Rmd
练习非常慢。R 调用 pdfLaTeX,后者调用 LaTeX,所有这些都对图形输出进行后处理。因此,如果我在 pstricks 中有复杂的遗留 LaTeX 代码或构建在 pstricks 之上的专用包,这些代码很难在 R(或 TikZ)中重写,我只会使用 pstricks。
您可以在下面找到 R/Markdown 源代码。这类似于使用include_tikz()
. 关键区别在于 (a)tex2image()
直接调用(而不是 via include_tikz()
),(b) 必须手动嵌入生成的图像,以及 (c) 需要 R 包tinytex
并且需要tinytex.engine_args = "-shell-escape"
设置选项。
```{r, 包括 = FALSE} ## 数据 p <- c(样本(1:3, 1), 样本(1:5, 1)) q <- c(样本((p[1] + 1):5, 1), 样本(1:5, 1)) 溶胶 <- 总和(绝对值(p - q)) ## 技巧 pst <- ' \\begin{pspicture}(-1,-1)(7,7) \\psaxes{->}(0,0)(-0.2,-0.2)(6.5,6.5)[$x$,0][$y$, 90] \\psdot(%s,%s) \\uput[0](%s,%s){$p$} \\psdot(%s,%s) \\uput[0](%s,%s){$q$} \\结束{pspicture} ' pst <- sprintf(pst, p[1], p[2], p[1], p[2], q[1], q[2], q[1], q[2]) ## 通过 tinytex 和 shell-escape 选项生成图形 opt <- options(exams_tex = "tinytex", tinytex.engine_args = "-shell-escape") 图 <- tex2image(pst, packages = c("auto-pst-pdf", "pst-all"), 名称 = “pqdist”,目录 = “.”,调整大小 = 400) 选项(选择) ``` 问题 ======== 两点的曼哈顿距离$d_1(p, q)$ 是多少 $p$和$q$如下图所示? ![](`r basename(fig)`) 解决方案 ======== 曼哈顿距离由下式给出: $d_1(p, q) = \sum_i |p_i - q_i| = |`rp[1]` - `rq[1]`| + |`rp[2]` - `rq[2]`| =`r 溶胶`$。 元信息 ================= exname: 曼哈顿距离 extype: 数字 解决方案:`r sol` exclozetype: 数字
推荐阅读
- java - 如何在 Java 中钳位值?
- java - 如何在 Android Studio 的 Java 库模块中使用 Dagger?
- c# - 如何在表面视图中从相机捕获图像
- python-3.x - PermissionError:[Errno 13] 权限被拒绝在 Windows 10 上使用代理的 Jupyter 笔记本
- python - 为什么 struct little endian 中的第一个打包数据是 big endian?
- bash - 在管道之后将 awk 结果传递给命令
- android - 在 Intent 中覆盖 OnActivityResult 不起作用 - kotlin
- algorithm - 验证稳定匹配的算法?
- python - 将列表转换为字典,然后通过键值将多个字典合并为一个
- python - 为什么这些条形图彼此重叠?