现在我已经完成了大部分工作,我正在尝试使用自定义的“\printbibliography”命令。我正在使用“article”类,但我采用了。
简而言之,我需要创建一个自定义命令,根据自定义类型“消息”的引用材料是否存在,创建 2 种类型的参考书目。但同样的方法适用于任何类型的参考书目,因此我稍微修改了我的代码,使“消息”类型成为任何类型的“X”条目类型。
我需要以下内容:
- 出现在目录中的书目标题
- 对某一类条目是否存在的条件测试。
- 如果不存在“X”类型的元素,那么我会打印参考书目
- 如果至少存在 1 个“X”类型的元素,我需要将参考书目拆分为 2 个子标题,并设置不同的标题。这些标题不得包含在目录中。
在“带有 X 条目”的情况下,此代码对我有用:
\newcommand{\printlegalbibliography}{%
\printbibheading[title={Bibliographie}, heading=bibintoc]
\printbibliography[nottype = X, heading=subbibliography, title={Doctrine}]
\printbibliography[type = X, heading=subbibliography, title={Documents Officiels}]
}
我想将其更改为如下形式:
if(bibliography not contains any X entry type)
{
\printbibliography[title={Bibliographie}, heading=bibintoc]
}
else
{
\printbibheading[title={Bibliographie}, heading=bibintoc]
\printbibliography[nottype = X, heading=subbibliography, title={Doctrine}]
\printbibliography[type = X, heading=subbibliography, title={Documents Officiels}]
}
问题:
- 是否有命令来对这部分“参考书目不包含任何 X 条目类型”进行编码?
- 在这种情况下,if-else 形式的正确代码是什么?
接受的答案
我只是复制粘贴了@moewe 的代码然后用相关的自定义类型替换(@message)
而且它运行起来毫无麻烦!
答案1
我们暂时假设你的“X 类型”是@online
。
首先,我们需要计算每种类型的条目数,这在 中完成\AtDataInput
。在 中,\printlegalbibliography
我们只需要检查是否有任何@online
条目
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\AtDataInput{%
\ifltxcounter{blx@typecount@\thefield{entrytype}@\the\c@refsection}
{}
{\newcounter{blx@typecount@\thefield{entrytype}@\the\c@refsection}}%
\stepcounter{blx@typecount@\thefield{entrytype}@\the\c@refsection}}
\newcommand{\printlegalbibliography}{%
\ifltxcounter{blx@typecount@online@\the\c@refsection}
{}
{\newcounter{blx@typecount@online@\the\c@refsection}}%
\ifnumgreater{\value{blx@typecount@online@\the\c@refsection}}{0}
{\printbibheading[title={Bibliographie}, heading=bibintoc]%
\printbibliography[nottype = online, heading=subbibliography, title={Doctrine}]%
\printbibliography[type = online, heading=subbibliography, title={Documents Officiels}]}
{\printbibliography[title={Bibliographie}, heading=bibintoc]}}
\makeatother
\begin{document}
\section{Two online sources}
\cite{sigfridsson,markey,ctan}
\printlegalbibliography
\newrefsection
\section{No online sources}
\cite{sigfridsson}
\printlegalbibliography
\end{document}