![Titlesec:\ifthesection 命令与 biblatex refsegment 存在问题](https://linux22.com/image/269586/Titlesec%EF%BC%9A%5Cifthesection%20%E5%91%BD%E4%BB%A4%E4%B8%8E%20biblatex%20refsegment%20%E5%AD%98%E5%9C%A8%E9%97%AE%E9%A2%98.png)
我用它titlesec
来设置页面样式并biblatex
打印按章节细分的累积参考书目。该命令似乎存在一些问题,\ifthesection
因为在以下 MWE 中,参考书目奇数页的标题应该显示,例如“参考文献第 1 章”,但我得到的却是“参考书目”。
\documentclass{book}
\usepackage[pagestyles]{titlesec}
\newpagestyle{main}[\scshape]{%
\headrule
\sethead
[\thepage][][\chaptertitlename\space\thechapter. \chaptertitle]
{\ifthesection{\thesection\space\,\sectiontitle}
{\chaptertitlename\space\thechapter. \chaptertitle}}{}{\thepage}
}
\newpagestyle{special}[\scshape]{%
\headrule
\sethead
[\thepage][][\chaptertitle]
{\ifthesection{\sectiontitle}{\chaptertitle}}{}{\thepage}
}
\usepackage{etoolbox}
\appto{\mainmatter}{\pagestyle{main}}
\appto{\backmatter}{\pagestyle{special}}
\usepackage[refsegment=chapter,backend=bibtex]{biblatex}
\defbibheading{bibbook}[\bibname]{\chapter{#1}}
\defbibheading{subbib}[\refname\space\chaptername\space
\ref*{refsegment:\therefsection\therefsegment}]{%
\setcounter{secnumdepth}{0}%
\section{#1}}
\addbibresource{biblatex-examples.bib}
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}
\mainmatter
\chapter{Foo}
\lipsum
\section{Baz}
\lipsum
\nocite{*}
\chapter{Bar}
\nocite{*}
\backmatter
\printbibheading[heading=bibbook]
\bibbysegment[heading=subbib]
\end{document}
一种解决方法是定义一个不使用该\ifthesection
命令的新页面样式,并在序言中执行以下操作:
\newpagestyle{bibatend}[\scshape]{%
\headrule
\sethead
[\thepage][][\chaptertitle]
{\sectiontitle}{}{\thepage}
}
\appto{\backmatter}{\pagestyle{bibatend}}
但是我想special
在后记中使用页面样式(因为我还有一个没有章节的索引,因此标题应该始终是章节标题)。所以我的问题是:为什么命令不能\ifthesection
正常工作?
答案1
该titlesec
软件包与任何biblatex
refsegment
或refsection
选项设置都不兼容。biblatex
修补低级章节/章节命令。titlesec
忽略所有这些更改,因为它重新定义了用户级章节/章节命令。
要解决此问题,您应该省略该refsegment=chapter
设置并使用以下命令手动创建参考段:
\chapter{<title>}
\begin{refsegment}
...
\end{refsegment}