sweave - 如何将 r-exams 问题中的小数点分隔符更改为逗号?
问题描述
我正在尝试在使用“r-exams/sweave”创建的问题中显示逗号作为小数分隔符。但是,我无法加载 siunitx 包或进行任何其他允许此更改的配置。我打算使用函数exams2moodle 将问题导出到moodle。
解决方案
通过 LaTeX 包
只有当输出是通过 LaTeX 生成的(例如,等等)时siunitx
,icomma
才能使用LaTeX 包。exams2pdf
但是,当 LaTeX 代码转换为 HTML 时(例如,在 中exams2moodle
),我不知道将带小数点的数字转换为小数点逗号的一般解决方案。
通过options(OutDec = ",")
R
但是,相对简单的是options(OutDec = ",")
在 R 中进行设置。如果满足以下条件,则可以使用:
- 所有相关数字要么用逗号硬编码在文本中,要么分别用
r ...
or动态生成,\Sexpr{...}
- 可以保证
exsolution
innum
练习仍然使用小数点。
例如,考虑schoice
练习deriv2。它满足上述两项:1.所有数字都是从R动态插入的,2.这不是num
练习。
library("exams")
options(OutDec = ",")
exams2html("deriv2.Rmd")
这同样适用于练习的 Rnw 版本。
如果练习应始终生成带逗号的数字,您还可以options(OutDec = ",")
在练习文件开头的第一个代码块中包含 ,并在options(OutDec = ".")
最后的代码块中恢复。
使用num
练习派生也是可能的。但是为了确保第 2 项,您需要在添加元信息之前写入fmt(res, decimal.mark = ".")
而不是仅仅fmt(res)
在exsolution
或者恢复到。options(OutDec = ".")
通过fmt(..., decimal.mark = "{,}")
R
上述方法的一个小缺点是,注重细节的观众可能会注意到在 LaTeX 数学模式$...$
中,逗号后插入了一个小空格。有关示例,请参见上面的屏幕截图。
如果要避免这种情况,则{,}
需要用作小数分隔符。不幸的是,options(OutDec)
不支持这一点,因为它需要是长度为 1 的字符串。此外,OutDec
可能还不够,因为数学模式中的{,}
数字需要,而纯文本中的数字只需要,
.
在这种情况下,最简单的解决方案是保留options(OutDec)
系统默认值。而是fmt(..., decimal.mark = "{,}")
在数学模式和fmt(..., decimal.mark = ",")
纯文本中使用数字。为了减少打字,您还可以添加两个便利功能,例如:
cfmt <- function(x, ...) fmt(x, ..., decimal.mark = ",")
mfmt <- function(x, ...) fmt(x, ..., decimal.mark = "{,}")
如果您想自己处理任何舍入,您exams::fmt()
也可以使用该函数,而不是构建该函数。base::format(..., decimal.mark = ...)
要求
请注意,传递decimal.mark
到fmt()
至少需要 R/exams 的 2.4-0 版本。在撰写本文时,这是 R-Forge 提供的当前开发版本,但很快将发布到 CRAN。
推荐阅读
- node.js - 将共享对象附加到 Socket.io Room
- google-app-engine - 如何使用 self.redirect() 传递整数变量
- android - 如何从 firebase 数据库中获取这些嵌套数据
- python - 最新版本的 pendulum.Interval()?
- c# - 试图避免在表中重复插入值
- excel - 将公式从 excel 更改为 vba,但出现预期错误:)
- c# - 基于从日期和到日期选择和 ipno、prno 选择的患者详细信息
- database - 如何使用flyway将数据从一个数据库迁移到另一个数据库?
- java - Java 持久性:要列出的 @ManyToMany 项目
- date - 需要在 Power BI 中设置上个月的月底