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

将 bibtex 的接口改为 \addbibresource 和 \printbibliography #875

Closed
zepinglee opened this issue May 10, 2023 · 12 comments
Closed

将 bibtex 的接口改为 \addbibresource 和 \printbibliography #875

zepinglee opened this issue May 10, 2023 · 12 comments

Comments

@zepinglee
Copy link
Contributor

目前有多处 \bibliography,如果用户将默认的 bibtex 方案改为 biblatex,需要将这些都修改为 \printbibliography,不太方便。

我提议将 bibtex 的接口 \bibliography 改为 \addbibresource\printbibliography,同 biblatex 和 citation-style-language 一致,这样就只需要修改 thusetup.tex 就可以了。

thuthesis/thusetup.tex

Lines 148 to 167 in c208916

% 参考文献使用 BibTeX + natbib 宏包
% 顺序编码制
\usepackage[sort]{natbib}
\bibliographystyle{thuthesis-numeric}
% 著者-出版年制
% \usepackage{natbib}
% \bibliographystyle{thuthesis-author-year}
% 本科生参考文献的著录格式
% \usepackage[sort]{natbib}
% \bibliographystyle{thuthesis-bachelor}
% 参考文献使用 BibLaTeX 宏包
% \usepackage[style=thuthesis-numeric]{biblatex}
% \usepackage[style=thuthesis-author-year]{biblatex}
% \usepackage[style=apa]{biblatex}
% \usepackage[style=mla-new]{biblatex}
% 声明 BibLaTeX 的数据库
% \addbibresource{ref/refs.bib}

初步想法:

  1. 兼容旧的接口 \bibliographystyle\bibliography
  2. bibtex 的 \printbibliography[] 如果有参数则给出警告。
  3. 主文档的 \bibliographystyle 也设置附录中的默认 bib style(bibunits\defaultbibliographystyle)。

另外 stone-zeng/fduthesis 目前就是这么处理的。

Originally posted by @zepinglee in #837 (comment)

@zepinglee
Copy link
Contributor Author

我提议将 bibtex 的接口 \bibliography 改为 \addbibresource\printbibliography,同 biblatex 一致,这样就只需要修改 thusetup.tex 就可以了。】

我读过(也抄过)fduthesis 里面的相关代码,觉得曾老师的封装方案已经很完备了,可以直接借来用。新功能也可以直接拿 L3 写,就作为重构的一部分了。

@atxy-blip 我记得 fduthesis 是设置 bib-backend 选择 bibtex/biblatex 的吧?但我更倾向于让用户加载宏包的方式进行控制,比如 \usepackage{natbib}\usepackage[...]{biblatex}。这样更加灵活,比如切换成 citation-style-language 也不必修改太多模板代码(如 #844 (comment))。

@atxy-blip
Copy link

atxy-blip commented May 10, 2023

我记得 fduthesis 是设置 bib-backend 选择 bibtex/biblatex 的吧?

是这样的,fduthesis 把载入宏包的部分也封装好了,在下面。这样做的好处是能把附属功能一并做成选项,比如顺序编码制和著者-出版年制的样式控制、批量载入 .bib 文件等。如果让用户手动载入,额外的功能或许都要写进钩子里面?

让用户手动载入 natbib 然后写 \addbibresource 可能也有点违反直觉……

关于灵活性,我在自己的项目里只做了 biblatex 的兼容,然后提供了可以选择禁用模板的全部参考文献设置的选项,从而保留了用户的自由。或许可以作为思路参考。

https://github.com/stone-zeng/fduthesis/blob/c4dc227f7c61ea31e9a4af615fa10e3f85618618/source/fduthesis.dtx#L5659-L5694

@zepinglee
Copy link
Contributor Author

是这样的,fduthesis 把载入宏包的部分也封装好了,在下面。这样做的好处是能把附属功能一并做成选项,比如顺序编码制和著者-出版年制的样式控制、批量载入 .bib 文件等。如果让用户手动载入,额外的功能或许都要写进钩子里面?

对。

biblatex 会加载 hyperref,而有的宏包(比如 cleverref)需要在 hyperref 后加载,这种情况如果用选项的方式在 \AtEndPreamble 加载宏包就很不方便。但让用户手动写 \usepackage 就比较自然。

让用户手动载入 natbib 然后写 \addbibresource 可能也有点违反直觉……

确实有点。那主文档 bibtex 参考文献还是保留 \bibliography 吧。附录的参考文献改成 \printbibliography,默认使用主文档设置的 .bib 文件。bibunits 原来的命令是 \putbib[<bibfile>],为了让用户更上手才改成了 \bibliography 的。

@note286
Copy link

note286 commented May 11, 2023

像 biblatex 会加载 hyperref,而有的宏包(比如 cleverref)需要在 hyperref 后加载,这种情况如果用选项的方式在 \AtEndPreamble 加载宏包就很不方便。但让用户手动写 \usepackage 就比较自然。

关于这一点,是否可以参考tabularray \UseTblrLibrary{}呢?也弄一个这样的命令,实际效果就是底部下载。

@stone-zeng
Copy link

stone-zeng commented May 11, 2023

补充一点,有些编辑器会根据 \bibliography{...} 来判断和解析参考文献数据,并提供一些辅助功能。如果不用这个反而会破坏这些功能。

@zepinglee
Copy link
Contributor Author

关于这一点,是否可以参考tabularray \UseTblrLibrary{}呢?也弄一个这样的命令,实际效果就是底部下载。

我不喜欢这种设计。

比如 amsmath 有的选项只能在加载的参数中设置,用 \UseTblrLibrary 就得用 \PassOptionsToPackage 特殊处理。还有如果文档类已经调用了 amsmath,不知道 tabularray 能不能正确处理。

理想的结果是,加载宏包的顺序不影响输出。使用 file hook 基本都能解决。

@zepinglee
Copy link
Contributor Author

补充一点,有些编辑器会根据 \bibliography{...} 来判断和解析参考文献数据,并提供一些辅助功能。如果不用这个反而会破坏这些功能。

\addbibresource 应该也会读吧?

@zepinglee
Copy link
Contributor Author

补充一点,有些编辑器会根据 \bibliography{...} 来判断和解析参考文献数据,并提供一些辅助功能。如果不用这个反而会破坏这些功能。

对了 fduthesis 会有这个问题吗?

@atxy-blip
Copy link

对了 fduthesis 会有这个问题吗?

如果用 bib-resource 填写数据源,确实可能在 TeXStudio 没法补全 citation key,后来还是补了一个 \addbibresourcestone-zeng/fduthesis#229)。

@note286
Copy link

note286 commented May 11, 2023

比如 amsmath 有的选项只能在加载的参数中设置,用 \UseTblrLibrary 就得用 \PassOptionsToPackage 特殊处理。

确实不够优雅,需要用户额外学习,但是也可以将可选参数传进去。

xduts的字体也是在后面设置的,导致circledtext正常加载的话,无法正确设置字符宽度,只能将circledtext在后面加载,我目前还没想到什么好的办法。字体在文档类参数里设置就不会有这个问题,但是我还想要在\xdusetup里设置,这样更统一。

还有如果文档类已经调用了 amsmath,不知道 tabularray 能不能正确处理。

tabularray仅对amsmathbooktabscounterdiagboxfunctionalnamerefsiunitxvarwidthzref做了特殊处理,这几个宏包使用\UseTblrLibrary加载会进行特殊处理。我记得没错的话,其他宏包使用甚至会报错。

如果在tabularray之前正常加载的宏包,仅有xcolorhyperref会自动做一些处理。

@zepinglee
Copy link
Contributor Author

@Harry-Chen 感觉可以发布一个新版本了。

@Harry-Chen
Copy link
Member

@Harry-Chen 感觉可以发布一个新版本了。

好的,今天发布,应该刚好是在研究生提交论文之前。

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

No branches or pull requests

5 participants