bibtex报错:! File ended while scanning use of \BR@@lbibitem.

bibtex报错: File ended while scanning use of \BR@@lbibitem.

这是笔者遇到最离谱的报错了,能解决也全凭运气

特别感谢:https://blog.csdn.net/qw11er/article/details/126689699

笔者的环境:ubuntu20.04+ texlive + vscode + latex-workshop

出现的问题时使用\bibliography时根本显示不出来参考文献

警告也是说\cite找不到citation,

找了半天没有发现任何问题

问题解决:

首先需要排除是找不到文件的问题。
源文件名为myBib.bib
原命令为\bibliography{myBib}

将命令改为\bibliography{whereismyBib}
立即出现找不到bibdata的错误,说明不是找不到文件的问题

到底是什么问题,不使用vscode latex-workshop的插件,逐步编译看看:
在命令行分别输入
pdflatex script
biblatex script
pdflatex script
pdflatex script

在第三步:pdflatex script报出了题目所示的错误
而解决方法是,打开同目录下的bbl,\bibitem之间空行即可

空行能通过build的原理目前还不清楚,应该是bbl文件的LaTeX语法的问题
也就是说bibtex工具本身生成的bbl文件有问题,这里给出bibtex版本信息如下:
bibtex版本信息

如果要使用vscode 的插件latex-workshop重现这个问题,需要更改settings.json,这个部分:

"latex-workshop.latex.clean.fileTypes": [
		"*.aux",
		"*.blg",
		"*.idx",
		"*.ind",
		"*.lof",
		"*.lot",
		"*.out",
		"*.toc",
		"*.acn",
		"*.acr",
		"*.alg",
		"*.glg",
		"*.glo",
		"*.gls",
		"*.fls",
		"*.log",
		"*.fdb_latexmk",
		"*.snm",
		"*.synctex(busy)",
		"*.synctex.gz(busy)",
		"*.nav",
		"*.vrb"
	]
	//去掉了"*.bbl"

去掉了"*.bbl",即设置latex-workshop不再删除这个中间文件
再点击build,可以看出vscode终于输出这个错误了,原先连报错都没有是真的折磨:
latex-workshop报错

永久解决这个问题:

根据上面的debug原理编写一个简单的python脚本如下:

import os
import subprocess
import argparse

#---------------------传入参数设定----------------------------
parser = argparse.ArgumentParser(description='传入仿真参数')
parser.add_argument('--texDir', type=str, required=True)

args = parser.parse_args()

# --------------------检查传入参数-----------------------------
texDir = args.texDir
if type(texDir) != str:
    raise ValueError('texDir应是字符串')

# -------------------开始修改bbl文件-------------------------
print('begin check and fix bbl process! ')

file_names = os.listdir(texDir)
tex_name = ''
for name in file_names:
    if name[-4:] == '.tex':
        tex_name = name[:-4]
        break
    else:
        continue

aux_file_name = tex_name + '.aux'
bbl_file_name = tex_name + '.bbl'


file_content = ''
generate_aux_command = 'pdflatex '+tex_name
generate_bbl_command = 'bibtex ' + tex_name


if aux_file_name not in file_names:
    subprocess.call(generate_aux_command, shell=True)
if bbl_file_name not in file_names:
    subprocess.call(generate_bbl_command, shell=True)

with open(texDir + '/{}'.format(bbl_file_name),'r+') as file_handle:
    file_content = file_handle.read()

# check file content
if file_content == '':
    subprocess.call(generate_bbl_command, shell=True)

# read file content again
with open(texDir + '/{}'.format(bbl_file_name),'r+') as file_handle:
    file_content = file_handle.read()

# fix file content:
with open(texDir + '/{}'.format(bbl_file_name),'w+') as file_handle:

    if file_content.count('\n\n%Type = Article') == 0 and file_content.count('\n%Type = Article') != 0:
        file_content = file_content.replace('\n%Type = Article','\n\n%Type = Article')
        file_handle.write(file_content)

    
 


以及对vscode setttings.json进行更改
在tex文件目录下打开终端:

mkdir .vscode
cd vscode/
touch settings.json

修改settings.json如下:
(记得自行更改python脚本的绝对路径 “/absolute_directory/to/python_scirpt/fix_bbl.py”):

{
    "editor.codeActionsOnSave": {
    
    },

      "latex-workshop.latex.tools": [
        {
          "name": "latexmk",
          "command": "latexmk",
          "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "-pdf",
          "%DOCFILE%"
          ]
        },
        {
            "name": "python",
            "command": "python",
            "args": [
                "/absolute_directory/to/python_scirpt/fix_bbl.py",//这个要根据自己的脚本路径自行更改!
                "--texDir=%DIR%"
            ]
        },
        {
          "name": "xelatex",
          "command": "xelatex",
          "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "%DOCFILE%"
            ]
        },          
        {
          "name": "pdflatex",
          "command": "pdflatex",
          "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "%DOCFILE%"
          ]
        },
        {
          "name": "bibtex",
          "command": "bibtex",
          "args": [
          "%DOCFILE%",
          ]
        },
      ],
      "latex-workshop.latex.clean.fileTypes": [
		"*.aux",
		"*.blg",
		"*.idx",
		"*.ind",
		"*.lof",
		"*.lot",
		"*.out",
		"*.toc",
		"*.acn",
		"*.acr",
		"*.alg",
		"*.glg",
		"*.glo",
		"*.gls",
		"*.fls",
		"*.log",
		"*.fdb_latexmk",
		"*.snm",
		"*.synctex(busy)",
		"*.synctex.gz(busy)",
		"*.nav",
		"*.vrb"
	],

      "latex-workshop.latex.recipes": [
      
          {
              "name": "XeLaTeX",
              "tools": [
                  "xelatex"
              ]
          },
          {
              "name": "PDFLaTeX",
              "tools": [
                  "pdflatex"
              ]
          },
          {
              "name": "BibTeX",
              "tools": [
                  "bibtex"
              ]
          },
          {
              "name": "LaTeXmk",
              "tools": [
                  "latexmk"
              ]
          },
          {
            "name": "fixBBL",
            "tools":[
                "python"
            ]
          },
          {
              "name": "xelatex -> bibtex -> xelatex*2",
              "tools": [
                  "xelatex",
                  "bibtex",
                  "python",
                  "xelatex",
                  "xelatex"
              ]
          },
          {
              "name": "pdflatex -> bibtex -> pdflatex*2",
              "tools": [
                  "pdflatex",
                  "bibtex",
                  "python",
                  "pdflatex",
                  "pdflatex"
              ]
          }
    ],
    "files.associations": {
        "*.tex": "latex"
    },
    "[latex]": {
    
        "editor.formatOnPaste": false,
        "editor.suggestSelection": "recentlyUsedByPrefix"
    },
    "files.autoGuessEncoding": true,
    "[python]": {
        "editor.formatOnType": true
    }

}

完成以后效果应该是这样子的:
完成效果
其中可以直接点击pdflatex->bibtex->pdflatex*2
问题解决~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值