在bookdown / rmarkdown中使用简短的作者引用

时间:2018-01-17 14:52:24

标签: latex r-markdown knitr bibtex bookdown

在我的报告中,我引用了AERA,APA和NCME的教育和心理测试标准

@Book{standards,
  title = {{Standards for Educational and Psychological Testing}},
  author = {{American Educational Research Association} and {American Psychological Association} and {National Council on Measurement in Education}},
  shortauthor = {AERA},
  publisher = {American Educational Research Association},
  address = {Washington, DC},
  year = {2014}
}

根据APA风格指南第6版,应该使用可识别的创作组织缩写。我第一次在文中引用这本书,它应该是这样的:

  

这是一些填充文本(美国教育研究协会   [AERA],美国心理学会,&全国委员会   关于教育测量,2014年)。还有一些   填充文本(AERA等,2014)。

但是,我的引用目前显示如下:

  

这是一些填充文本(美国教育研究协会,   美国心理学会,&全国计量委员会   在教育,2014年)。这里有一些填充文本(美国版)   教育研究协会等,2014)。

有没有办法在 bookdown 中实施这些引用?这里有一个最低限度可重复的例子:https://github.com/wjakethompson/bookdown-citations

2 个答案:

答案 0 :(得分:2)

我开发了一种部分工作的解决方案。此解决方案打印长作者和缩短版本,但仅适用于单个作者,并且由于它使用LaTeX实现自定义,因此仅适用于PDF输出。< / p>

根据您提供的示例,我创建了一个参考书目test.bib,如下所示:

@Book{standards2,
  title = {{Standards for Educational and Psychological Testing}},
  author = {{American Educational Research Association}},
  shortauthor = {AERA},
  publisher = {American Educational Research Association},
  address = {Washington, DC},
  year = {2014}
}

还创建了文件header.tex。这定义了一个新的LaTeX命令\citefull,它以(author [shortauthor], year)格式打印出一个引文。这种方法基于this answer松散地基于此。文件内容如下:

\DeclareCiteCommand{\citefull}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \DeclareNameAlias{labelname}{first-last}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   (\printnames{author}
   [\printnames{shortauthor}],
   {\printdate})
   }

  {\usebibmacro{postnote}}

% Adds a comma between the author and year
\renewcommand*{\nameyeardelim}{\addcomma\space}

以下是Rmarkdown文件。进行了更改以使用biblatex作为引用包。要获得完整的引文,可以使用命令\citefull{}

---
output: 
  pdf_document:
    includes:
      in_header:  header.tex
    citation_package: biblatex
bibliography: test.bib
biblio-style: authoryear

---

\citefull{standards2}

[@standards2]

enter image description here

  

附加说明

     

正如我所说,这是一个部分解决方案,因为它不适用于多个   作者,我必须承认我对定制LaTeX引用的知识   没有延伸到那么远!希望有人能够扩展   这个答案能够改进这个功能。

     

我尝试使用解决方案explained here,   但是因为它需要在biblatex之前加载LaTeX包,所以   需要改变pandoc .tex模板。我觉得这个   使用头文件不太理想。

     

即使我编辑了原始模板,我仍然遇到问题   让这个解决方案有效。我收到了一个错误   \DeclareLanguageMappingSuffix并且无法解决我的问题   搞砸了。

     

我希望这些笔记可以帮助那些考虑探索更好解决方案的人。

答案 1 :(得分:2)

我能够改进Mikey Harper提供的解决方案。它仍然只是部分解决方案,因为它使用LaTeX包,因此仅适用于PDF。主要思想是使用this LaTeX solution并将其调整为RMarkdown。内容test.bib

@Book{standards,
  title = {{Standards for Educational and Psychological Testing}},
  author = {{American Educational Research Association} and {American Psychological Association} and {National Council on Measurement in Education}},
  shortauthor = {{AERA et al.}},
  publisher = {American Educational Research Association},
  address = {Washington, DC},
  year = {2014}
}

Rmd档案:

---
output: 
  pdf_document:
    citation_package: biblatex
bibliography: test.bib
biblio-style: apa
biblatexoptions:
  - sortcites
header-includes:
  - \DeclareLanguageMapping{english}{american-apa}
---

[@standards]

[@standards]

结果: enter image description here

这不是所要求的格式,因为短作者位于作者列表的末尾,但根据this question,没有更好的解决方案。因此我开了https://github.com/plk/biblatex-apa/issues/63