You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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 记录。按以下步骤调整即可解决:

  1. 修改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"
    ---
    
  2. 保持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}]
    
  3. 自定义编译流程
    你可以手动执行以下命令,或者在R里用tinytex自动完成:

    • 手动编译步骤:
      1. 用xelatex生成.aux文件:xelatex mwe.tex
      2. 调用bib2gls处理缩写:bib2gls -g mwe
      3. 再次用xelatex编译两次:xelatex mwe.tex、xelatex mwe.tex
    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:11