Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不能使用\bibliography,只能在最前面的设置中设置bib文件路径 #47

Closed
jinyu121 opened this issue Jan 12, 2019 · 5 comments

Comments

@jinyu121
Copy link
Contributor

jinyu121 commented Jan 12, 2019

好像会议啊期刊啊什么的都习惯用 \bibliography{reference.bib} 来导入参考文献列表。然后发现在这个模板中,用这种方式导入的话会报错。必须在最上面style里面设置才可以用。

LuaTex报错信息:

Can be used only in preamble. \bibliography

XeTex报错信息

Can be used only in preamble. ^^I\bibliography
@stone-zeng
Copy link
Owner

默认情况下,fduthesis 会用 biblatex 宏包处理参考文献(这个似乎没有写进文档)。biblatex 重新定义了 LaTeX 的 \bibliography 命令,使其只允许在导言区使用,并且标记为 deprecated。

为了兼容 biblatex 和 BibTeX,fduthesis 用一组选项统一处理了参考文献数据库选取和样式选择。所以建议按照文档中说明的方法使用,即在导言区用 style/bib-resourcestyle/bib-style 等选项声明数据库和样式,在正文用 \printbibliography 命令打印参考文献列表。

@jinyu121
Copy link
Contributor Author

但是这样会导致TeXStudio和VSCode的智能提示失效。只有用\bibliography的时候才会有智能提示。

@jinyu121
Copy link
Contributor Author

并且我还发现,fduthesis 好像有时候并没有去调用bib来编译……

删除所有临时文件,只留下tex和bib,在style里面设置,去掉bibliography。TeXStudio的Log里面只有两个luatex的log,没发现调用了biblatex。(也就是说,应该是编译四遍,但是目前只编译两遍就说编译完成了,少了中间的biblatex和不知道第几步的lualatex)

@jinyu121
Copy link
Contributor Author

临时解决办法是,上面style里面设置,但不设置bib-resource。下面写bibliography。
这样可以四遍编译、有智能提示。(但是biblatex会报个错)

This is BibTeX, Version 0.99d (TeX Live 2018)
The top-level auxiliary file: main.aux
The style file: gbt7714-unsrt.bst
Illegal, another \bibdata command---line 97 of file main.aux
 : \bibdata
 :         {}
I'm skipping whatever remains of this command
Database file #1: reference.bib
Warning--empty journal in paszke_automatic_2017
(There was 1 error message)

@stone-zeng
Copy link
Owner

智能提示这个做不到啊……编辑器肯定不能什么东西都支持,毕竟 TeX 的语法是动态的(你可以打开 .cls 试一试,完全没有可读性的)。

biblatex 只是个宏包,实际上要调用 biber 来编译。TeXStudio 似乎默认没有把 biber 加到工具链里面,你可以手动改(当然智能提示还是不行的)。

最好的手段是命令行里面用 latexmk,它会根据选择的 bib-backend 决定用 biber 还是 bibtex 编译:

latexmk -xelatex <file name>

另外,如果用 bibtex 的话,tex 文件里面需要显式指定 bib-backend=bibtex。不指定直接编译,大概率会报错。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants