2016-06-04 5 views
3

Я использую библиотеку stargazer для генерации таблиц в latex (Rstudio/knitr/Sweave).
Мне нужно изменить десятичный разделитель на запятую (","), и функция stargazer() работает большую часть времени. Только когда передается опция summary = false, результаты получаются с дополнительным пространством между числами.
Кто-нибудь знает, как преодолеть эту проблему?Изменение десятичной метки позволяет звездочке помещать дополнительное пространство между цифрами

<<results='asis'>>= 
library(stargazer) 
set.seed(0) 
x = matrix(rnorm(3),nrow = 1) 
y = matrix(rnorm(9),nrow = 3) 

stargazer(x,summary=FALSE) 
stargazer(x,summary=FALSE,decimal.mark = ",") 
stargazer(y,summary=TRUE,decimal.mark = ",") 
@ 

Table 2 always shows a extra space between the comma and the first decimal place. Table 3 shows good results

ответ

3

При осмотре сгенерированного TEX становится ясно, что stargazer не добавляет пробелы после запятых. Проблема находится где-то в другом месте:

Корень этой проблемы состоит в том, что LaTeX не распознает , как разделитель по умолчанию. Поэтому, когда в математическом режиме, LaTeX добавляет пробел после каждого ,. Эта проблема описана here on TEX.SE, и решение должно включать пакет icomma.

\documentclass{article} 
\usepackage{icomma} 
\begin{document} 
<<results='asis', echo=FALSE, message = FALSE>>= 
library(stargazer) 
set.seed(0) 
x = matrix(rnorm(3),nrow = 1) 
y = matrix(rnorm(9),nrow = 3) 

stargazer(x,summary=FALSE) 
stargazer(x,summary=FALSE,decimal.mark = ",") 
stargazer(y,summary=TRUE,decimal.mark = ",") 
@ 
\end{document} 

Output with icomma


Остается один вопрос: Почему эта проблема не видна в таблице 3 от вопроса? Это связано с тем, что stargazer использует несогласованную математическую разметку в таблицах. Вторая ячейка в таблице 2 содержит $$-$0,326$, тогда как строка 2, последний столбец таблицы 3 содержит $-$0,006. В первом случае само число находится в математическом режиме, что приводит к описанному выше поведению. (И, к сожалению, - находится в текстовом режиме, что приводит к плохой типографии). Во втором случае номер находится в текстовом режиме, где дополнительное пространство не добавляется.

Чтобы устранить проблему с плохо отформатированными минус-знаками, я рекомендую использовать xtable вместо stargazer для простых (не сводных) таблиц. В сочетании с индивидуальным колонного типа, который устанавливает столбец в математическом режиме, результат:

Output with icomma and xtable

\documentclass{article} 
\usepackage{icomma} 
\usepackage{tabularx} 
\newcolumntype{R}{>{$}r<{$}} % like an "r" column but in math mode 
\begin{document} 
<<results='asis', echo=FALSE>>= 
library(xtable) 
set.seed(0) 
x = matrix(rnorm(3),nrow = 1) 

print.xtable(
    xtable(x, caption = "", align = rep("R", 4)), 
    include.rownames = FALSE, 
    include.colnames = FALSE, 
    format.args = list(decimal.mark = ","), 
    caption.placement = "top") 
@ 
\end{document}