首页 > 解决方案 > 我可以在 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}

标签: latexr-markdowntikzr-examspstricks

解决方案


是的,这是可能的,尽管我不建议这样做。您可以使用以下内容:

  • 使用包含 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")

以 HTML 呈现的 dist4.Rmd 练习的屏幕截图

同样可以在exams2moodle(). 该练习的灵感来自于 R/exams 中现成的distdist2dist3练习模板。与这些在 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: 数字

推荐阅读