混合 titletoc 和 chapterbib 与 sectionbib 选项时出现问题

混合 titletoc 和 chapterbib 与 sectionbib 选项时出现问题

考虑以下文件:

.
├── main.tex
├── preface.tex
├── preface.bib
├── chapter.tex
└── chapter.bib

这些文件的内容详细说明在本文末尾。


重点如下。我将其\usepackage{titletoc}与 结合使用\usepackage[sectionbib]{chapterbib}。当titletoc未在章节中使用时(请参阅preface.tex),则一切正常,参考书目将添加到章节末尾。但是,当以以下方式titletoc在章节中使用时(请参阅chapter.tex):

\chapter{Chapter}
\startcontents[chapters]
\printcontents[chapters]{p}{1}{}{}
% ... CONTENTS HERE ...
\bibliographystyle{alpha}
\bibliography{chapter} 

然后两个包中的一个似乎失败了,最终我得到的参考书目是一个章节(而不是我想要的章节内的一节),并且引用失败并显示为[?]

问题:如何使其正常工作并让章节以本地目录开始,并以包含参考文献的部分结束?

下载文件: 关联(这不是必需的,只是为了避免复制/粘贴的人)


插图


main.tex:

% main.tex
\documentclass[oneside, 10pt]{book}

\usepackage[T1]{fontenc}
\usepackage[margin = 2cm]{geometry}
\usepackage{lipsum}
\usepackage{titletoc}
\usepackage[sectionbib]{chapterbib}  
\usepackage{hyperref}

\begin{document}
\frontmatter
\include{preface}
\mainmatter
\include{chapter}
\end{document}

preface.tex:

% preface.tex
\chapter{Preface}

\section{Preface first section}
\lipsum[1]\cite{preface:ref1}

\section{Preface second section}
\lipsum[1]\cite{preface:ref2}

\section{Preface third section}
\lipsum[1]\cite{preface:ref3}

\bibliographystyle{alpha}
\bibliography{preface} 

preface.bib:

% preface.bib
@article{preface:ref1,
    author  = {Someone}, 
    title   = {Preface1},
    journal = {Journal},
    year    = 2000,
}

@article{preface:ref2,
    author  = {Someone}, 
    title   = {Preface2},
    journal = {Journal},
    year    = 2000,
}

@article{preface:ref3,
    author  = {Someone}, 
    title   = {Preface3},
    journal = {Journal},
    year    = 2000,
}

chapter.tex:

% chapter.tex
\chapter{First chapter}
\startcontents[chapters]
\printcontents[chapters]{p}{1}{}{}

\section{First chapter first section}
\lipsum[1]\cite{chapter:ref1}

\section{First chapter second section}
\lipsum[1]\cite{chapter:ref2}

\section{First chapter third section}
\lipsum[1]\cite{chapter:ref3}

\bibliographystyle{alpha}
\bibliography{chapter} 

chapter.bib:

% chapter.bib
@article{chapter:ref1,
    author  = {Someone}, 
    title   = {FirstChapter1},
    journal = {Journal},
    year    = 2000,
}

@article{chapter:ref2,
    author  = {Someone}, 
    title   = {FirstChapter2},
    journal = {Journal},
    year    = 2000,
}

@article{chapter:ref3,
    author  = {Someone}, 
    title   = {FirstChapter3},
    journal = {Journal},
    year    = 2000,
}

答案1

是的,与软件包存在冲突。(sectionbib 选项和 hyperref 的使用无关。)生成目录(或 LOF/LOT)时,chapterbib 会插入包含文件(章节)指示器的设置,因此标题或标题中的任何引用都将在目录/LOF/LOT 中正确生成(即使这些引用不正确)。没有尝试保留本地上下文,假设目录位于主文件中,但指示器仍指向目录末尾的主文件。

我看到部分目录是按组执行的,因此最快的解决方法是在定义中更改\gdef\def

\def\@CB@wtoc#1{\string\@writefile{#1}{\gdef % <- change to \def
  \string\the@ipfilectr{\@extra@b@citeb}}}%

(在 chapterbib.sty 的第 24 行自行更改!)我预计我可能会引入一些更复杂的状态恢复,类似于

 \def\@tempa#1{\AtBeginDocument{\if@filesw
     \immediate\write\@auxout{\string\@writefile
       {#1}{\string\global\string\let\string\save@ipfilectr\string\the@ipfilectr}}\fi}}
 \@tempa{toc}\@tempa{lof}\@tempa{lot}
 \def\@tempa#1{\AtEndDocument{\if@filesw
     \immediate\write\@auxout{\string\@writefile
       {#1}{\string\global\string\let\string\the@ipfilectr\string\save@ipfilectr}}\fi}}
 \@tempa{toc}\@tempa{lof}\@tempa{lot} 

顺便说一句,为每一章创建单独的 bib 文件似乎很麻烦。除非这些章节是由不同的作者独立撰写的,否则我不会这样做。

相关内容