我按照模块化方法创建了一个图书项目(多语言 XeLaTeX),https://en.wikibooks.org/wiki/LaTeX/Modular_Documents特别是@段落“子文件”(用于命令 \onlyinsubfile 和 \notinsubfile 的使用)和@“子文件:不同子目录中的主 + 从属”(用于正确的路径)。
我需要能够分别编写两个章节以及整本书。我需要在每章中列出参考文献,而不是在书的末尾。
我有以下文件结构:
根文件夹:与 book.tex、bibliography.bib 一起使用
/figures 文件夹包含所有数据
/chapterX 文件夹:对于每个 chapterX.tex
每章单独编写都很棒!
但是当我尝试编译整本书时,我会在每章末尾获得完整的参考资料。我想这是因为在编译整本书时,所有参考资料都被写入辅助文件,而当逐一编译章节参考书目时,它们包含整套参考资料。我尝试将参考书目分成几部分,例如,将 bibliography1.bib 放在 chapter1 中,只包含 chapter1 的参考资料,但结果非常尴尬:所有章节参考书目都变成了简化的 bibliography1.bib!
在我的序言中我使用:
\usepackage[semicolon,round,sort&compress,sectionbib]{natbib}
\usepackage{chapterbib}
有办法吗?
-----------------------------------------------
由于有几个人对此感兴趣,我附上了一小段代码来更具体。不过我认为这个问题可能是结构性的和深层次的,无论我提供什么代码,问题仍然存在……我希望我错了。
这是主要的乳胶文件(book.tex):
\documentclass[11pt,b5paper,twoside,openright]{book}
\usepackage[semicolon,round,sort&compress,sectionbib]{natbib}
\usepackage[sectionbib]{chapterbib}
\usepackage{apalike}
\usepackage[toc,page,titletoc]{appendix}
\bibliographystyle{apalike}
\usepackage{subfiles}
\newcommand{\onlyinsubfile}[1]{#1}
\newcommand{\notinsubfile}[1]{}
\begin{document}
\renewcommand{\onlyinsubfile}[1]{}
\renewcommand{\notinsubfile}[1]{#1}
\subfile{chapter0/chapter0}
\subfile{chapter1/chapter1}
\subfile{chapter2/chapter2}
\subfile{chapter3/chapter3}
\begin{appendices}
\subfile{appendixI/appendixI}
\subfile{appendixII/appendixII}
\end{appendices}
\end{document}
以下是章节示例:
\makeatletter
\def\input@path{{../}}
\makeatother
\documentclass[../book.tex]{subfiles}
\begin{document}
%...... here goes the document text
\onlyinsubfile{\bibliography{../bibliography.bib}}
\notinsubfile{\bibliography{./bibliography.bib}}
\end{document}
显然,本章的前言部分需要几个命令来指定相对路径和主 latex 文件。命令
\onlyinsubfile
\notinsubfile
正如我在 wikibooks 提供的参考资料中所述。
答案1
我最终设法找到了解决此问题的方法,并将其发布在这里以供将来参考。
关键在于使用另一个包,比布尼茨包裹!
上面提供的代码需要更改的是在主文件中(命令上方\begin{document}
)包含以下几行:
\usepackage{bibunits}
\defaultbibliography{bibliography} % This is the one and only bibliography file for all chapters
\defaultbibliographystyle{apalike} % This is the style to be used throughout the book
然后,在每个子文件(章节)中包含\begin-\end{bibunit}
以下内容:
\begin{document}
\begin{bibunit}
%.......text with \cite{...} commands
\putbib % this is the command that renders the chapter bibliography here!
\end{bibunit}
\end{document}
显然代码行
\onlyinsubfile{\bibliography{../bibliography.bib}}
\notinsubfile{\bibliography{./bibliography.bib}}
不再需要(如果我们只需要全球性的图书编纂),它们会被一个\putbib
命令取代。
编译主文件时,会创建一系列与bu*.aux
子文件(章节)的辅助文件相对应的文件。然后需要将这些辅助文件用作输入,bibtex
但这可能不那么容易,因为我们讨论的是多个文件,而且在许多情况下,例如在 MacOS 上使用 TeXShop 时,没有运行多个任意命名的辅助文件的选项。为了解决这个问题,我必须使用以下代码创建一个非常简单的“引擎”(实际上bibtex
每个bu*.aux
文件都运行):
#!/bin/sh
for auxfile in bu*.aux
do
echo ---Running bibtex $auxfile
bibtex "$auxfile"
done
我将此代码保存为BIBunits.engine
并将其移动到( ) 中的Engines
文件夹中,以便“引擎”在 TeXShop GUI 中可用。Library
TeXShop
~\Library\TeXShop\Engines
完成所有这些步骤后,问题就解决了。我得到了一本完整的书,其中有每章的参考书目。如果一切都按照上面介绍的方式完成,那么流程如下:
- 创建和编辑文件
- 编译主文件
- 运行
BIBunits.engine
(bibtex
所有bu*aux
文件) - 编译主文件两次