如何在 R/考试练习中包含 TikZ 图像? [英] How to include TikZ images in R/exams exercises?

查看:57
本文介绍了如何在 R/考试练习中包含 TikZ 图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

R/exams 包支持使用其函数 include_tikz() 包含 TikZ 图形,例如,如

cardealer.Rmd的源代码:

<前>```{r tikzsource, echo = FALSE, results = "hide"}类型 <- match_exams_device()graf01 <- '\\definecolor{uuuuuu}{rgb}{0.26,0.26,0.26}\\definecolor{zzttqq}{rgb}{0.6,0.2,0}\\definecolor{ududff}{rgb}{0.30,0.30,1}\\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1cm,y=1cm]\\clip(-0.1,-0.1) 矩形 (5,5);\\fill[线宽=2pt,color=zzttqq,fill=zzttqq,fill opacity=0.10] (0,0) -- (4.68,-0.02) -- (4.7,4.66) -- (0.02,4.68) -- 循环;\\draw (0.99,3.80) node[anchor=north west] {\\textbf{49}};\\draw (3.44,3.80) node[anchor=north west] {\\textbf{12}};\\draw (2.22,1.74) node[anchor=north west] {\\textbf{14}};\\draw (2.22,3.00) node[anchor=north west] {\\textbf{5}};\\draw (2.22,3.96) node[anchor=north west] {\\textbf{6}};\\draw (1.40,2.53) node[anchor=north west] {\\textbf{8}};\\draw (3.00,2.53) node[anchor=north west] {\\textbf{9}};\\draw (3.85,1.39) node[anchor=north west] {\\textbf{}};\\draw (0.35,4.57) node[anchor=north west] {\\textbf{DH}};\\draw (3.97,4.57) node[anchor=north west] {\\textbf{CA}};\\draw (2.31,0.72) node[anchor=north west] {\\textbf{R}};\\draw [线宽=2pt] (1.76,3.08) 圆(1.3cm);\\draw [线宽=2pt] (3.05,3.13) 圆(1.3cm);\\draw [线宽=2pt] (2.45,1.98) 圆(1.3cm);\\draw [线宽=2pt,color=zzttqq] (0,0)-- (4.68,-0.02);\\draw [线宽=2pt,color=zzttqq] (4.68,-0.02)-- (4.7,4.66);\\draw [线宽=2pt,color=zzttqq] (4.7,4.66)-- (0.02,4.68);\\draw [线宽=2pt,color=zzttqq] (0.02,4.68)-- (0,0);\\开始{脚本大小}\\draw [fill=ududff] (0,0) 圆 (2.5pt);\\draw [fill=ududff] (4.68,-0.02) 圆 (2.5pt);\\draw [fill=uuuuuu] (4.7,4.66) 圆 (2.5pt);\\draw [fill=uuuuuu] (0.02,4.68) 圆 (2.5pt);\\结束{脚本大小}\\结束{tikzpicture}'``问题========一家汽车经销商在一个月内售出了 103 辆至少具有以下特征之一的汽车:液压转向 (DH)、自动变速箱 (CA)、无线电 (R).下图显示有多少辆车具有以下特征组合:```{r, echo = FALSE, results = "asis"}include_tikz(graf01, name = "graf", format = typ, markup = "markdown",图书馆 =箭头",宽度 =5cm")``有多少汽车同时具备这三个特征?元信息================别名:汽车经销商类型:数量溶解度:5

The R/exams package supports including TikZ graphics using its function include_tikz(), e.g., as shown in the automaton and logic exercises shipped with the package.

After getting include_tikz() to work for these exercises (see: Why are TikZ graphics rendered with exams2pdf but not with exams2moodle?) I tried to create my own exercise. However, so far this does not work yet. My code is:

```{r datos1, echo = FALSE, results = "hide"}
options(tinytex.verbose = TRUE)
options(scipen=999)
knitr::opts_chunk$set(echo = TRUE)
##opts_chunk$set(fig.cap="")
library(exams)
library(magick)

  questions<-solutions<-explanations<-NULL
  questions[1]<-paste("Graph 1.")
  solutions[1]<-TRUE
  explanations[1]<-"."

 questions[2]<-paste("Graph 2.")
 solutions[2]<-FALSE
 explanations[2]<-"."

 questions[3]<-paste("Graph 3.")
 solutions[3]<-FALSE
 explanations[3]<-"."

 questions[4]<-paste("Graph 4.")
 solutions[4]<-FALSE
 explanations[4]<-"."

 orden<-sample(1:4)
 questions<-questions[orden]
 solutions<-solutions[orden]
 explanations<-explanations[orden]

 graf01<-'
 \\definecolor{uuuuuu}{rgb}{0.26,0.26,0.26};
 \\definecolor{zzttqq}{rgb}{0.6,0.2,0};
 \\definecolor{ududff}{rgb}{0.30,0.30,1};
 \\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1cm,y=1cm]
 \\clip(-0.1,-0.1) rectangle (5,5);
 \\fill[line width=2pt,color=zzttqq,fill=zzttqq,fill opacity=0.10] (0,0) -- (4.68,-0.02) -- 
  (4.7,4.66) -- (0.02,4.68) -- cycle;
 \\draw (0.99,3.80) node[anchor=north west] {\\textbf{49}};
 \\draw (3.44,3.80) node[anchor=north west] {\\textbf{12}};
 \\draw (2.22,1.74) node[anchor=north west] {\\textbf{14}};
 \\draw (2.22,3.00) node[anchor=north west] {\\textbf{5}};
 \\draw (2.22,3.96) node[anchor=north west] {\\textbf{6}};
 \\draw (1.40,2.53) node[anchor=north west] {\\textbf{8}};
 \\draw (3.00,2.53) node[anchor=north west] {\\textbf{9}};
 \\draw (3.85,1.39) node[anchor=north west] {\\textbf{}};
 \\draw (0.35,4.57) node[anchor=north west] {\\textbf{DH}};
 \\draw (3.97,4.57) node[anchor=north west] {\\textbf{CA}};
 \\draw (2.31,0.72) node[anchor=north west] {\\textbf{R}};
 \\draw [line width=2pt] (1.76,3.08) circle (1.3cm);
 \\draw [line width=2pt] (3.05,3.13) circle (1.3cm);
 \\draw [line width=2pt] (2.45,1.98) circle (1.3cm);
 \\draw [line width=2pt,color=zzttqq] (0,0)-- (4.68,-0.02);
 \\draw [line width=2pt,color=zzttqq] (4.68,-0.02)-- (4.7,4.66);
 \\draw [line width=2pt,color=zzttqq] (4.7,4.66)-- (0.02,4.68);
 \\draw [line width=2pt,color=zzttqq] (0.02,4.68)-- (0,0);
 \\begin{scriptsize}
 \\draw [fill=ududff] (0,0) circle (2.5pt);
 \\draw [fill=ududff] (4.68,-0.02) circle (2.5pt);
 \\draw [fill=uuuuuu] (4.7,4.66) circle (2.5pt);
 \\draw [fill=uuuuuu] (0.02,4.68) circle (2.5pt);
 \\end{scriptsize}
 \\end{tikzpicture}
'
```

Question
========
An auto dealer sold 53 cars in a month; 33 of them had hydraulic steering (DH); 21 were 
automatic gearboxes (CA); and 38 had radius (R); 4 had hydraulic steering, automatic gears 
and radio; 3 had power steering and automatic shifts, but they had no radio; 13 had 
automatic gears and radio, but did not have hydraulics and, 15 had hydraulics and radio, but 
did not have automatic gears.

The graph that represents the information of the sale in the agency is

Graph 1:

```{r, echo = FALSE, results = "asis"}
include_tikz(graf01, name = "graf01", markup = "markdown",library = c("arrows"))
```

```{r questionlist, echo = FALSE, results = "asis"}
library(exams)
answerlist(questions, markup = "markdown")
```

In other exercises I have included the source code of this image created in TikZ, but outside the R chunks (from \begin{tikzpicture} to \end{tikzpicture}) so that it works with exams2pdf() (screenshot). But I could not get it to work with exams2moodle().

解决方案

Essentially your code works and I did not have to make many modifications. What I did:

  • Omit setting the unnecessary options at the beginning of the initial R code chunk.
  • Omit the unnecessary semicolons at the end of the regular LaTeX commands in graf01 before the {tikzpicture}.
  • Add a call to match_exams_device() so that the type of graphic created by TikZ can be in the same format as the graphics created by the R/Markdown code chunks (PNG vs. PDF vs. SVG).
  • Improve the include_tikz() arguments to use the graphic type from the previous item and to include a fixed width.

Subsequently, the biggest change I made was to modify the Question section so that it is about a single graphic and add a corresponding Meta-information section. Doing so the exercise is self-contained and the complete source code for the file cardealer.Rmd is included at the end of this post. With this the following three commands all work:

  • exams2pdf("cardealer.Rmd") which renders the TikZ graphic into PDF format.
  • exams2html("cardealer.Rmd") which renders the TikZ graphic into PNG format.
  • exams2html("cardealer.Rmd", svg = TRUE) which renders the TikZ graphic into SVG format.

And given that exams2html() works the inclusion in exams2moodle() will also work because this internally also generates the same kind of HTML code. In all versions the output looks something like this:

Source code of cardealer.Rmd:

```{r tikzsource, echo = FALSE, results = "hide"}
typ <- match_exams_device()

graf01 <- '
\\definecolor{uuuuuu}{rgb}{0.26,0.26,0.26}
\\definecolor{zzttqq}{rgb}{0.6,0.2,0}
\\definecolor{ududff}{rgb}{0.30,0.30,1}
\\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1cm,y=1cm]
\\clip(-0.1,-0.1) rectangle (5,5);
\\fill[line width=2pt,color=zzttqq,fill=zzttqq,fill opacity=0.10] (0,0) -- (4.68,-0.02) -- (4.7,4.66) -- (0.02,4.68) -- cycle;
\\draw (0.99,3.80) node[anchor=north west] {\\textbf{49}};
\\draw (3.44,3.80) node[anchor=north west] {\\textbf{12}};
\\draw (2.22,1.74) node[anchor=north west] {\\textbf{14}};
\\draw (2.22,3.00) node[anchor=north west] {\\textbf{5}};
\\draw (2.22,3.96) node[anchor=north west] {\\textbf{6}};
\\draw (1.40,2.53) node[anchor=north west] {\\textbf{8}};
\\draw (3.00,2.53) node[anchor=north west] {\\textbf{9}};
\\draw (3.85,1.39) node[anchor=north west] {\\textbf{}};
\\draw (0.35,4.57) node[anchor=north west] {\\textbf{DH}};
\\draw (3.97,4.57) node[anchor=north west] {\\textbf{CA}};
\\draw (2.31,0.72) node[anchor=north west] {\\textbf{R}};
\\draw [line width=2pt] (1.76,3.08) circle (1.3cm);
\\draw [line width=2pt] (3.05,3.13) circle (1.3cm);
\\draw [line width=2pt] (2.45,1.98) circle (1.3cm);
\\draw [line width=2pt,color=zzttqq] (0,0)-- (4.68,-0.02);
\\draw [line width=2pt,color=zzttqq] (4.68,-0.02)-- (4.7,4.66);
\\draw [line width=2pt,color=zzttqq] (4.7,4.66)-- (0.02,4.68);
\\draw [line width=2pt,color=zzttqq] (0.02,4.68)-- (0,0);
\\begin{scriptsize}
\\draw [fill=ududff] (0,0) circle (2.5pt);
\\draw [fill=ududff] (4.68,-0.02) circle (2.5pt);
\\draw [fill=uuuuuu] (4.7,4.66) circle (2.5pt);
\\draw [fill=uuuuuu] (0.02,4.68) circle (2.5pt);
\\end{scriptsize}
\\end{tikzpicture}
'
```

Question
========
An auto dealer sold 103 cars in a month that had at least one of the following features:
hydraulic steering (DH), automatic gearbox (CA), radio (R). The following graph displays
how many cars had which combination of features:

```{r, echo = FALSE, results = "asis"}
include_tikz(graf01, name = "graf", format = typ, markup = "markdown",
  library = "arrows", width = "5cm")
```

How many cars had all three features?


Meta-information
================
exname: car dealer
extype: num
exsolution: 5

这篇关于如何在 R/考试练习中包含 TikZ 图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆