![在 bibentry 上使用 knitr 编码错误](https://linux22.com/image/390047/%E5%9C%A8%20bibentry%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20knitr%20%E7%BC%96%E7%A0%81%E9%94%99%E8%AF%AF.png)
我试图引用以下代码使用的包:https://stackoverflow.com/a/43888025/8146116我将 bibentry 样式更改为 latex 但收到警告:
警告::0-4:某些输入无法重新编码为 ASCII}
包含非英文字符
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\let\bold\textbf %this is necessary
\begin{document}
<<r_list, echo=FALSE, results='asis'>>=
citations <- function(includeURL = TRUE, includeRStudio = FALSE) {
if(includeRStudio == TRUE) {
ref.rstudio <- RStudio.Version()$citation
if(includeURL == FALSE) {
ref.rstudio$url = NULL;
}
print(ref.rstudio, style = 'text')
cat('\n')
}
cit.list <- c('base', names(sessionInfo()$otherPkgs))
for(i in 1:length(cit.list)) {
ref <- citation(cit.list[i])
if(includeURL == FALSE) {
ref$url = NULL;
}
a=format(ref, style = 'latex')
cat(a)
cat('\\par ')
}
}
library(tidyverse)
citations()
@
\end{document}
另外如何在 RStudio 之外使用 RStudio.Version()?
答案1
欢迎来到 TeX.SE。第一个问题很好。
注意:此解决方案需要安装。在或 R
中执行RStudio
knitr 的替代编辑器。
步骤1。
检查文件编码设置RStudio
。转到Tools > Code > Saving > Default text encoding
并选择UTF-8
。阅读 Yihui 关于文件编码的讨论这里。软件包的其中一位作者的名字 (François) 中有一个 ç (变音符) dpylr
,如果UTF-8
文件编码中未设置,则会产生错误。还建议\usepackage[T1]{fontenc}
在文件前言中使用。tex
第2步。
该R
块生成已加载包的列表。对于每个包,使用函数将该base
包与 中列出的包组合起来,检索引用。函数输出的结构是一个列表。使用包中的函数将其转换为具有结构的变量。然后使用函数(也来自包)将其写入文件。names(sessionInfo()$otherPkgs)
citation
citation
ref
BibEntry
as.BibEntry
RefManageR
ref
bib
WriteBib
RefManageR
步骤3.
从那里开始,LaTeX
接管。bib
文件在序言中使用 进行声明\addbibresource
。格式化是使用biblatex
和完成的Biber
。所有包引用都使用\nocite{*}
和输出\printbibliography
。
与原始方法相比,此方法有两个特别的好处。首先,文件bib
被写入磁盘。JabRef
如果需要,它可以导入到书目数据库(例如)并进行操作。其次,通过调用biblatex
和biber
,我们可以很好地控制输出的格式以及包的书目在文档中出现的位置。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{hyperref}
\usepackage[margin=2.5cm]{geometry}
\usepackage[style=authoryear,backend=biber]{biblatex}
\addbibresource{packages.bib}
\begin{document}
<<r_list,echo=FALSE,eval=TRUE,results='asis',tidy=TRUE>>=
tidy.opts = list(blank = FALSE, width.cutoff = 50)
library(tidyverse)
library(RefManageR)
cit.list <- c('base', names(sessionInfo()$otherPkgs))
for(i in 1:length(cit.list)) {
ref <- as.BibEntry(citation(cit.list[i]))
WriteBib(ref,file="packages.bib",biblatex=TRUE,append=TRUE,verbose=FALSE)
}
@
\nocite{*}
\printbibliography
\end{document}
结果如下: