创建专用\Sexpr函数版本

创建专用\Sexpr函数版本,r,sweave,r-exams,R,Sweave,R Exams,我正在使用考试包生成一些考试(工程)。我的源文件是Rnw格式,因此底层引擎是swave 在R端,我使用units包(检查维度的正确性)并创建了一个函数(称为units2tex)来将一个量值从单位转换为等价物。因此,当我计算一个变量时,我必须为LaTeX创建一个副本: <<>>= R = set_units(1,ohm) I = set_units(1,A) V = R*I R_tex = units2tex(R) I_tex = units2tex(I) #V_tex

我正在使用
考试
包生成一些考试(工程)。我的源文件是
Rnw
格式,因此底层引擎是swave

在R端,我使用
units
包(检查维度的正确性)并创建了一个函数(称为
units2tex
)来将一个量值从单位转换为等价物。因此,当我计算一个变量时,我必须为LaTeX创建一个副本:

<<>>=
R = set_units(1,ohm)
I = set_units(1,A)
V = R*I

R_tex = units2tex(R)
I_tex = units2tex(I)
#V_tex = units2tex(V)

@

For $R = \Sexpr{R_tex}$, the answer is \Sexpr{units2tex(V)}.
并编制:

library(exams)
exams2html(c("question1.Rnw"), encoding="utf-8",template='plain8.html',mathjax = TRUE)

要减少污染,请执行以下操作:

a <- list(t=function(x){units2tex(x)},d=function(x){units2tex(x,digits=2)})

Rnw练习中的
a通过显式调用
as.character()
\Sexpr{}
的内容转换为字符。由于这是一个通用函数,您可以轻松定义自己的方法

as.character.units <- function(x, ...) units2tex(x, ...)

然后需要分别将其称为
\Sexpr{u2t(V)}
`r u2t(V)`

如果您包含一个简单的示例输入,可以用来测试和验证可能的解决方案,这将更容易帮助您。您好@jamarier,您觉得下面的答案之一足以解决您的问题吗?如果是,请单击旁边的复选标记(计票下方)接受。然后在StackOverflow上相应地标记该问题。这解决了第一个问题(种类):使用\Sexpr时类型的个性化。但第二个问题还没有得到回答:定义Sexpr的变体来表达数据中的变体。谢谢。据我所知,您的理想解决方案是不可能的(自定义
\Sexpr
)。因此,您只能将上述思想结合起来:不同的(子)类与不同的
as.character()
方法或不同的短函数。
a <- list(t=function(x){units2tex(x)},d=function(x){units2tex(x,digits=2)})
as.character.units <- function(x, ...) units2tex(x, ...)
u2t <- function(x, ...) units2tex(x, ...)