我使用了这里给出的解决方案 如何使用 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
\addsec
secnumdepth
\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}
。)