我想用等宽字体打印用stargazer()
生成的乳胶表,我希望用knitr
以可重复的方式进行(即没有手动乳胶编码)。我尝试定义一个名为mymono
的环境,然后通过\begin{}
和\end{}
将knitr chunk包装在此环境中。这是行不通的;该表以默认字体样式打印。
\documentclass{article}
\newenvironment{mymono}{\ttfamily}{\par}
\begin{document}
<<lm, echo=FALSE>>=
df <- data.frame(x=1:10, y=rnorm(10))
library(stargazer)
lm1 <- lm(y ~ x ,data=df)
@
% reproducible
\begin{mymono}
<<table_texstyle, echo=FALSE, results='asis', message=FALSE>>=
stargazer(lm1, label="test")
@
\end{mymono}
\end{document}
除了stargazer()
之外,我认为font.size
中没有字体设置。
# > sessionInfo()
# R version 3.0.2 (2013-09-25)
# Platform: x86_64-apple-darwin10.8.0 (64-bit)
# other attached packages:
# [1] stargazer_5.1
比将新table{}
包装在新字体样式中更好的方法是仅包装tabular{}
,以便标题保持默认样式。我不知道是否有办法以编程方式将乳胶代码插入stargazer()
输出。
答案 0 :(得分:2)
评论太长了,所以这是一个答案的开头。使用问题中的模型:
\documentclass{article}
\begin{document}
<<lm, echo=FALSE, message=FALSE, include=FALSE>>=
df <- data.frame(x=1:10, y=rnorm(10))
library(stargazer)
lm1 <- lm(y ~ x ,data=df)
tabular_tt <- function(orig.table) {
library(stringr)
tabular.start <- which(str_detect(orig.table, "begin\\{tabular\\}"))
tabular.end <- which(str_detect(orig.table, "end\\{tabular\\}"))
new.table <- c(orig.table[1:(tabular.start - 1)],
"\\texttt{",
orig.table[tabular.start:tabular.end],
"}",
orig.table[(tabular.end + 1):length(orig.table)])
return(new.table)
}
@
<<print, results='asis', echo=FALSE>>=
cat(tabular_tt(capture.output(stargazer(lm1, label="test"))), sep="\n")
@
\end{document}
您可以根据需要轻松调整。如果你遇到麻烦,我会通过在LaTeX中玩一个小玩具桌来确保你的目标LaTeX语法是正确的,也许可以玩你编织时生成的tex文件。
您可能需要创建函数cat(new.table, sep = "\n")
才能将输出正确输入到knitr文档中。