考虑以下文件:
.
├── 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 文件似乎很麻烦。除非这些章节是由不同的作者独立撰写的,否则我不会这样做。