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

2023-10-07 21:50

本文主要是介绍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]breakelse:continueaux_file_name = tex_name + '.aux'
bbl_file_name = tex_name + '.bbl'file_content = ''
generate_aux_command = 'pdflatex '+tex_name
generate_bbl_command = 'bibtex ' + tex_nameif 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
问题解决~

这篇关于bibtex报错:! File ended while scanning use of \BR@@lbibitem.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160641

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

MySQL报错sql_mode=only_full_group_by的问题解决

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非... 目录报错信息DataGrip 报错还原Navicat 报错还原报错原因解决方案查看当前 sql mo

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.