使用bib2gls与R Markdown渲染术语表失败问题求助
解决R Markdown中bib2gls从.bib文件加载缩写列表的问题
我之前也碰到过类似的情况——在R Markdown里想用bib2gls从独立.bib文件加载缩写时,直接按常规配置会出问题。下面先还原你的场景,再给出能让独立.bib方案正常工作的修复步骤。
失败方案回顾
你尝试用.bib文件集中存储缩写,具体配置如下:
1. abbreviations.bib 文件
@abbreviation{ecoli, short={E.~coli}, long={Escherichia coli} } @abbreviation{raustralis , short ={R.~ australis}, long={Rickettsia australis} }
2. preamble.tex 文件
% fixes problem with glossaries causing mathspec to return an error asking for amsmath to be loaded first \makeatletter \let\RequirePackage\original@RequirePackage \let\usepackage\RequirePackage \makeatother % using bib2gls \usepackage[record,abbreviations,style=index]{glossaries-extra} \setabbreviationstyle{long-short} \GlsXtrLoadResources[src={abbreviations},selection={all}]
3. R Markdown 文件
--- output: pdf_document: latex_engine: xelatex includes: in_header: preamble.tex title: "mwe" --- ## R Markdown This is the first instance \gls{ecoli}, \gls{raustralis}. This is the second instance: \gls{ecoli}, \gls{raustralis}. \printunsrtglossary[title={Abbreviations},type=abbreviations]
编译后无法正常生成缩写列表,出现异常(对应截图)。
可行但缺乏灵活性的方案
你发现移除\GlsXtrLoadResources,直接在preamble里手动定义缩写能正常工作:
% using bib2gls \usepackage[abbreviations,style=index]{glossaries-extra} \setabbreviationstyle{long-short} \newabbreviation{ecoli}{E.~coli}{Escherichia coli} \newabbreviation{raustralis}{R.~australis}{Rickettsia australis}
这个方法能生成正确的术语表,但无法利用.bib文件集中管理缩写的便利性。
修复独立.bib文件方案的关键步骤
问题的核心是:R Markdown默认编译流程不会调用bib2gls外部工具,而glossaries-extra的record选项必须依赖这个工具处理.bib文件生成 glossary 记录。按以下步骤调整即可解决:
修改R Markdown的YAML头部
开启keep_tex保留中间TeX文件,同时关闭默认的引用包,避免冲突:--- output: pdf_document: latex_engine: xelatex includes: in_header: preamble.tex keep_tex: true citation_package: none title: "mwe" ---保持preamble配置不变
确保glossaries-extra的record选项保留,这是bib2gls工作的前提:% fixes problem with glossaries causing mathspec to return an error asking for amsmath to be loaded first \makeatletter \let\RequirePackage\original@RequirePackage \let\usepackage\RequirePackage \makeatother % using bib2gls \usepackage[record,abbreviations,style=index]{glossaries-extra} \setabbreviationstyle{long-short} \GlsXtrLoadResources[src={abbreviations},selection={all}]自定义编译流程
你可以手动执行以下命令,或者在R里用tinytex自动完成:- 手动编译步骤:
- 用xelatex生成.aux文件:
xelatex mwe.tex - 调用bib2gls处理缩写:
bib2gls -g mwe - 再次用xelatex编译两次:
xelatex mwe.tex、xelatex mwe.tex
- 用xelatex生成.aux文件:
- R自动编译代码:
library(tinytex) # 先生成TeX文件 rmarkdown::render("mwe.Rmd", output_format = "pdf_document", params = list(keep_tex = TRUE)) # 执行完整编译流程 latexmk("mwe.tex", engine = "xelatex", extra_args = "-bibtex=bib2gls -g")
- 手动编译步骤:
另外,建议清理abbreviations.bib里的多余空格,避免显示异常:
@abbreviation{ecoli, short={E.~coli}, long={Escherichia coli}} @abbreviation{raustralis, short={R.~australis}, long={Rickettsia australis}}
会话信息
R version 3.5.0 (2018-04-23) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) Matrix products: default locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252
内容的提问来源于stack exchange,提问作者mpschramm
相关产品推荐
相关产品推荐

