2014-10-18 106 views
3

它一直是knitr的一大特色,它可以進行智能捨入,所以你可以避免很多彎路。knitr中的科學記數法:如何改進排版

當一位顧客抱怨我錯誤地給小數點後,我注意到忘記$$可能用科學記數法打印的數字是非常危險的。但同一位客戶抱怨說,使用科學記數法進行格式化看起來很難看,因爲類似膠乳的數學與主要字體不匹配。在封閉的問題(https://github.com/yihui/knitr/issues/864

scientific notation

繼@一輝的評論中,$$是必需的。

有人對此有一個智能解決方案嗎?目前,我回到用舊版的sprintf格式化所有的東西。

--- 
output: 
    html_document: 
    theme: cosmo 
--- 

I use the cosmo theme because it shows the typographic problem more clearly. 

```{r} 
options(digits=2) 
mean = c(2.31310934, 1.23456e-7) 
std = c(0.31310934, 6.54321e-7) 
``` 

digits is `r getOption("digits")` 

The mean is `r mean[1]` with a standard deviation of `r std[1]`. 

This looks good 

The mean is `r mean[2]` with a standard deviation of `r std[2]`. 

Note that the aboves looks like "1.23510". 

The mean is $`r mean[2]`$ with a standard deviation of $`r std[2]`$. 
+0

你會考慮改變文檔的字體以匹配mathjax的輸出嗎?這似乎更容易。我相信你所需要的只是一些CSS選擇STIX字體。 – baptiste 2014-10-19 00:44:28

+0

Brr ...回到UNIX 60年代看?不是我會喜歡它。 – 2014-10-19 09:51:01

回答

2

您可以隨時重新定義inline輸出掛鉤,以避免許多明確的sprintf/round/paste0 ...

knitr::knit_hooks$set(inline = function(x) { 
    knitr:::format_sci(x, 'md') 
}) 

這將使用形式1.23 × 10^-7^爲科學記數法的語法,如果你的輸出應該很好地工作格式只是HTML。

對於特定類型的輸出格式來說這是一個簡單的問題,但是當您希望數字格式可以跨所有格式(包括HTML,Word,LaTeX等)移植時,很難。這就是爲什麼$ $成爲針織衫1.7的必需品。

+0

謝謝,益輝,那應該是個解決方案。你可能不應該將其隱藏在文檔的「小點」之下,我相信在下個星期更多的人會被變化所困擾。是否有可能使上面的鉤子成爲HTML中的默認值,並且在$$未用於其他格式時發出警告? – 2014-10-19 09:50:00

+0

@DieterMenne在某種程度上,我同意這不是一個小小的改變。然而,我不能將上面的鉤子設置爲HTML中的默認值,因爲那些在數字周圍有'$ $'的人會失敗。考慮到可移植性,唯一的解決方案是需要'$ $',不幸的是... – 2014-10-20 02:12:18