将我的 bibtex .tex 文件切换为 UTF-8 并导入一些新条目后,我仍在尝试让 biber 工作。
INFO - This is Biber 1.9
INFO - Config file is '/Users/myname/.biber.conf'
INFO - Logfile is 'Diss.blg'
INFO - Reading 'Diss.bcf'
INFO - Using all citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'references.bib' for section 0
INFO - Decoding LaTeX character macros into UTF-8
INFO - Found BibTeX data source 'references.bib'
WARN - Overwriting field 'year' with year value from field 'date' for entry '1991'
WARN - Overwriting field 'year' with year value from field 'date' for entry 'Thomas-Vielma2008'
FATAL - Caught signal: SEGV
Likely your .bib has a very bad entry which causes libbtparse to crash:
我已经清理了我的 bibtex 文件中的很多内容,但我的 pdf 中仍然没有参考书目,因为 biber 似乎遇到了一些问题,但在 .blg 日志文件中我没有找到关于有问题的行的提示。
- 是否有其他日志文件可以告诉我这里出了什么问题?
- 我怎样才能尽快解决这个问题?
- 看来 biber 处理所有条目,即使它们没有被引用 - 这是正确的吗?
- biber 是否有一个选项,可以让它对条目不那么“挑剔”,但仍然为工作人员提供至少一个参考书目?
- .bib 文件中大约有 3000 个条目,因此无法手动测试每个条目。有没有办法自动执行此测试过程或打印出最后处理的条目?
答案1
查找问题条目的系统自动化方法
有人建议删除一半的 bibtex 条目,这样可以进一步减少嫌疑人的数量。
由于我很懒(并且不知道如何轻松地做到这一点),我使用了以下半自动方法(全部在以下方法中Terminal
完成MacOS X 10.6
:
- 在一个空目录中创建了我的 .bib 文件的副本
mkdir bibentries
创建了一个名为 bibentries 的新目录split -p @ -a 4 mybibfilename.bib ./bibentries/
将我的 bib 文件拆分为每个条目一个文件,所有文件都创建在 bibentries 目录中cd bibentries
切换到 bibentries 目录for old in *; do mv $old $old.bib; done
为 bibentries 目录中的所有文件添加了扩展名 .bibrm -rf
biber --cache``
清除 biber 缓存sh ~/bin/batchbiber.sh
在所有文件上运行 biber(参见下面的 bash 脚本)
脚本 batchbiber.sh (位于我的主路径~/bin/
)
(如果您的主路径中没有~/bin/
,您可以使用 创建它mkdir bin
。)
#!/bin/bash
# script processes all .bib files in current direcory with "biber --tool"
let n=0 # counter for files
# count files and print their number
for j in *.bib; do
let n=n+1
done
echo $n bibtex files found
# process files one by one with biber --tool
for j in *.bib; do
biber --tool $j
done
grep -i SEGV *.blg
在创建的 .blg 文件中搜索错误消息
...然后,我发现了一个有此错误的条目,并很容易就发现了问题所在:一个多余的逗号:
Author = {Liao,Hongmei and Coyle, ,Thomas W.},
:-)
答案2
已调整 MostlyHarmless 的 Windows 答案,因为带有 git bash 的 split 命令不支持-p @
参数。此后 batchbiber.sh 脚本运行正常 :)
mkdir bibentries
split -t @ -l 1 -a 4 mybibfilename.bib ./bibentries/
cd bibentries
for old in *; do mv $old $old.bib; done
for file in *; do
sed -z -i "1s/^/@/" "$file" &&
truncate -s-1 $file
done
rm aaaa.bib
rm -rfbiber --cache
因为-t
在@后面做了分隔,所以我们需要在每个文件的第一个位置添加@,并删除文件末尾的最后一个字符(也是@)
for file in *; do
sed -z -i "1s/^/@/" "$file" &&
truncate -s-1 $file
done
因为第一个文件(aaa.bib)只包含@,所以我们将其删除
rm aaaa.bib