在 bibentry 上使用 knitr 编码错误

在 bibentry 上使用 knitr 编码错误

我试图引用以下代码使用的包: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中执行RStudioknitr 的替代编辑器

步骤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)citationcitationrefBibEntryas.BibEntryRefManageRrefbibWriteBibRefManageR

步骤3. 从那里开始,LaTeX接管。bib文件在序言中使用 进行声明\addbibresource。格式化是使用biblatex和完成的Biber。所有包引用都使用\nocite{*}和输出\printbibliography

与原始方法相比,此方法有两个特别的好处。首先,文件bib被写入磁盘。JabRef如果需要,它可以导入到书目数据库(例如)并进行操作。其次,通过调用biblatexbiber,我们可以很好地控制输出的格式以及包的书目在文档中出现的位置。

\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}

结果如下:

在此处输入图片描述

相关内容