如何使用 biblatex 和嵌套的参考书目/目录以及正确定义的页面样式

如何使用 biblatex 和嵌套的参考书目/目录以及正确定义的页面样式

我使用了这里给出的解决方案 如何使用 biblatex 获得带有嵌套目录的嵌套参考书目? 使用 biblatex 实现嵌套书目/目录,但是即使最后选择的页面样式是用户使用 titlesec 配置的,创建的页面也有自己的页眉/页脚。我怀疑 biblatex 在创建书目页面时定义了自己的页面样式,但我不知道如何调整它以使用我定义的页面样式。有什么线索吗?阅读 titleeps 文档时它说:

因此,不鼓励直接使用标记命令(参见titlesec.pdf),但如果您需要它们,您可以写道:

\chapter*{My Chapter}
\chaptermark{My Chapter}

我尝试了此代码但没有成功:

% Bibliography
\chapter*{Bibliography}     
\addcontentsline{toc}{chapter}{Bibliography}
\chaptermark{Bibliography}
\printbibliography[heading=subbibintoc, title={Book references}, type=book]
\printbibliography[heading=subbibintoc, title={Article references}, type=article]
\printbibliography[heading=subbibintoc, title={Other references}, nottype=article, nottype=book]

我自己定义的pagestyle代码是:

\usepackage[pagestyles]{titlesec}
\newpagestyle{thesis}[\small]{
  \setheadrule{.55pt}%
  \sethead[\thepage]%        even-left
          [\chaptertitle]%   even-center
          []%                 even-right
          {}%                 odd-left
          {\sectiontitle}%   odd-center
          {\thepage}%        odd-right
}

答案1

根据titlesec文档(§4.2) 不应随意使用带星号的分段命令\addcontentsline\mark...命令。相反,文档建议局部修改secnumdepth计数器以实现相同效果。

文档中的示例为此定义了一个环境,但使用专用命令来\addchap生成所需的节标题似乎更容易。\addchap可以定义如下

\newcommand*{\addchap}{\@dblarg\addchap@i}
\newcommand*{\addchap@i}[2][]{%
  \begingroup
  \c@secnumdepth\m@ne
  \chapter[#1]{#2}%
  \endgroup
}

本质上,此定义在本地将计数器secnumdepth(负责部分编号)更改为-1(使用\c@secnumdepth\m@ne),这会导致命令生成未编号的节。使用辅助命令的设置\@dblarg只是为了正确处理可选参数。

在下面的代码中,此定义是自动完成的,以\MkAddSectioningCMD避免多次重复相同的构造。

因此,我们更改bibintoc和标题定义以使用和subbibintoc的本地版本,通过更改来抑制章节和节号。\addchap\addsecsecnumdepth

\documentclass[british]{book}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}
\usepackage{lipsum}

\usepackage[pagestyles]{titlesec}
\newpagestyle{thesis}[\small]{%
  \setheadrule{.55pt}%
  \sethead[\thepage]%        even-left
          [\chaptertitle]%   even-center
          []%                 even-right
          {}%                 odd-left
          {\sectiontitle}%   odd-center
          {\thepage}%        odd-right
}

\makeatletter
\newcommand*{\MkAddSectioningCMD}[2]{%
  \expandafter\newcommand\expandafter*\expandafter{\csname #1\endcsname}{%
    \expandafter\@dblarg\expandafter{\csname #1@i\endcsname}}%
  \expandafter\newcommand\expandafter*\expandafter{\csname #1@i\endcsname}[2][]{%
    \begingroup
    \c@secnumdepth\m@ne
    #2[##1]{##2}%
    \endgroup}%
}
\makeatother

\MkAddSectioningCMD{addchap}{\chapter}
\MkAddSectioningCMD{addsec}{\section}


\defbibheading{bibintoc}[\bibname]{%
  \addchap{#1}}
\defbibheading{subbibintoc}[\refname]{%
  \addsec{#1}}

\addbibresource{biblatex-examples.bib}

\begin{document}
\pagestyle{thesis}
\tableofcontents

\chapter{Lorem}
\section{Florem}
Lorem \autocite{sigfridsson,worman,geer}
\lipsum[1-12]
\nocite{*}

\addchap{Ipsum}

\addchap[Dolor]{Dolor Sit}

\addchap{\bibname}
\printbibliography[heading=subbibintoc, title={Book references}, type=book]
\printbibliography[heading=subbibintoc, title={Article references}, type=article]
\printbibliography[heading=subbibintoc, title={Other references}, nottype=article, nottype=book]
\end{document}

带标题的“文章参考”页面的屏幕截图


如果你更喜欢 LaTeX3,可以将其定义\addchap更改为

\NewDocumentCommand{\addchap}{om}{%
  \begingroup
  \c@secnumdepth\m@ne
  \IfNoValueTF{#1}
    {\chapter{#2}}
    {\chapter[#1]{#2}}%
  \endgroup}

在这种情况下,我们会\MkAddSectioningCMD改为

\makeatletter
\newcommand*{\MkAddSectioningCMD}[2]{%
  \NewDocumentCommand{#1}{om}{%
    \begingroup
    \c@secnumdepth\m@ne
    \IfNoValueTF{##1}
      {#2{##2}}
      {#2[##1]{##2}}%
    \endgroup}%
}
\makeatother

并将其用作

\MkAddSectioningCMD{\addchap}{\chapter}
\MkAddSectioningCMD{\addsec}{\section}

(当您想在没有的情况下使用此功能时,您将需要最新版本的 LaTeX 内核\usepackage{xparse}。)

相关内容