R 用钩子将胶乳染色
TL;博士 我希望在某些情况下更改某些latex命令(在本例中为R 用钩子将胶乳染色,r,knitr,R,Knitr,TL;博士 我希望在某些情况下更改某些latex命令(在本例中为\definecolor),因此我希望在R中为这些命令创建文本,并在标记期间将它们写入标记文件。我还不能让它完美地工作使用刀钩 更多详情: 我想在.rnw文件中定义的颜色数量(和样式)各不相同,因此我避免对.rnw文档中的\definecolor调用进行硬编码 看来我能用刀钩做到这一点,而且我非常接近。但我对一些事情感到困惑 这里有一个可复制的例子。R文件优先 library(RColorBrewer) library(knitr)
\definecolor
),因此我希望在R中为这些命令创建文本,并在标记期间将它们写入标记文件。我还不能让它完美地工作使用刀钩
更多详情:
我想在.rnw
文件中定义的颜色数量(和样式)各不相同,因此我避免对.rnw
文档中的\definecolor
调用进行硬编码
看来我能用刀钩做到这一点,而且我非常接近。但我对一些事情感到困惑
这里有一个可复制的例子。R文件优先
library(RColorBrewer)
library(knitr)
colNames <- c("one","two","three")
txtColors <- sub("#","",brewer.pal(6, "Dark2")[1:3])
# set the knitr hook to create color definitions within the rnw file
knitr::knit_hooks$set(setColors = function(before, options, envir) {
if (!before){
defs <- vector("list",length(txtColors))
for(i in 1:length(txtColors)){
defs[[i]] <- paste0("\\definecolor{",colNames[[i]],"Color}{HTML}{",txtColors[[i]],"}")
}
return(paste0("\\xglobal",unlist(defs), "\n"))
}
})
setwd(file.path("G:", "my", "working", "dir"))
knit2pdf("testColors_s.rnw")
如何避免此警告或阻止knitr创建此行
如果您有任何关于这方面的建议,我们将不胜感激。
提前感谢。这看起来像是一种黑客行为,但我想出了一个解决方案,使用文档挂钩而不是块挂钩。这解决了这两个问题(
xglobal
不再需要,并且没有创建额外的definecolor
)。我们欢迎更好的解决方案
可复制示例,R文件:
library(RColorBrewer)
library(knitr)
colNames <- c("one","two","three")
txtColors <- sub("#","",brewer.pal(6, "Dark2")[1:3])
defs <- vector("list",length(txtColors))
for(i in 1:length(txtColors)){
defs[[i]] <- paste0("\\\\definecolor{",colNames[[i]],"Color}{HTML}{",txtColors[[i]],"}")
}
knit_hooks$set(document = function(x) {
sub('%CustomColorDefsHere', paste0(unlist(defs), "\n", collapse = ""), x)
})
setwd(file.path("G:", "my", "working", "dir"))
knit2pdf("testColors_s.rnw")
我希望这对某人有用
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}\begin{kframe}
library(RColorBrewer)
library(knitr)
colNames <- c("one","two","three")
txtColors <- sub("#","",brewer.pal(6, "Dark2")[1:3])
defs <- vector("list",length(txtColors))
for(i in 1:length(txtColors)){
defs[[i]] <- paste0("\\\\definecolor{",colNames[[i]],"Color}{HTML}{",txtColors[[i]],"}")
}
knit_hooks$set(document = function(x) {
sub('%CustomColorDefsHere', paste0(unlist(defs), "\n", collapse = ""), x)
})
setwd(file.path("G:", "my", "working", "dir"))
knit2pdf("testColors_s.rnw")
\documentclass{article}
\usepackage{xcolor}
%CustomColorDefsHere
\begin{document}
\textcolor{oneColor}{The first color}
\textcolor{twoColor}{The second color}
\textcolor{threeColor}{The third color}
\end{document}