我可以用我了解的编程语言(或者只是终端,我想)为此编写一个简单的程序,但是在 LaTeX 中有没有一种简单的方法可以做到这一点?
也许这可以在 LuaLaTeX 中完成?获取引用类型的正则表达式只是@.*\{
(至少在 Sublime Text 中)。
我有和这样的条目@online
,@article
但我不知道哪些有,哪些没有,而且我的参考书目文件非常大。我想制作一个按类型排序的参考列表,但为了做到这一点,我需要先知道我有哪些文章类型!
我找到了一种在 Sublime 中执行此操作的方法(在 Sublime 中复制/粘贴 bib 文件 --> 使用正则表达式全选@.*\{
--> alt + enter --> 转到编辑 --> 排列行 --> 唯一),但我仍然保留这个问题以获得 (Lua)LaTeX 风格的答案。
现在我可以按照说明进行操作按参考文献类型划分参考书目
我现在必须输入:
\printbibliography[type=article,title={Articles}]
\printbibliography[type=inproceedings,title={Conference papers}]
\printbibliography[type=book,title={Books}]
\printbibliography[type=inbook,title={Book Chapters}]
\printbibliography[type=incollection,title={Chapters in a Collection}]
\printbibliography[type=MastersThesis,title={Master Theses}]
\printbibliography[type=techreport,title={Tech Reports}]
\printbibliography[type=misc,title={Misc}]
这很好,但我仍然想知道如何才能更自动化地做到这一点。
答案1
这实现了你最初要求的功能。它生成一个条目类型列表,用于
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\newcommand*{\usedbiblatextypes}{}
\AtDataInput{%
\xifinlist{\thefield{entrytype}}{\usedbiblatextypes}
{}
{\listxadd{\usedbiblatextypes}{\thefield{entrytype}}}}
\newcommand*{\printallentrytypes}{%
\ifdefvoid{\usedbiblatextypes}
{}
{You used the following entry types:
\begin{itemize}
\forlistloop{\item}{\usedbiblatextypes}%
\end{itemize}}}
\begin{document}
\cite{sigfridsson,worman,geer}
\printbibliography
\printallentrytypes
\end{document}
答案2
我建议你采用比最初想象的更简单的方法。我知道你想把你的参考书目分成不同的条目类型,但正在寻找一种安全的方法来“不遗漏任何东西”。
下面提供了一种简单的方法来检查您是否遗漏了某些内容。本质上,您可以创建一个类别alreadyinbib
并添加一个AtEverybibitem
钩子以将任何引用的条目添加到该类别。这样,您就可以使用 捕获任何剩余的条目\printbibliography[notcategory=alreadyinbib]
。如果其中有任何条目,请找到它们的条目类型,将它们添加到您的列表中,直到alreadyinbib
参考书目结果为空。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareBibliographyCategory{alreadyinbib}
\AtEveryBibitem{%
\addtocategory{alreadyinbib}{\thefield{entrykey}}%
}
\begin{document}
\nocite{*}
\printbibliography[type=article,title={Articles}]
\printbibliography[type=inproceedings,title={Conference papers}]
\printbibliography[type=book,title={Books}]
\printbibliography[type=inbook,title={Book Chapters}]
\printbibliography[type=incollection,title={Chapters in a Collection}]
\printbibliography[type=MastersThesis,title={Master Theses}]
\printbibliography[type=techreport,title={Tech Reports}]
\printbibliography[type=misc,title={Misc}]
\printbibliography[notcategory=alreadyinbib,title={Missing Entrytypes}]
\end{document}