文件夹中的多个子文件共享同一根参考书目

文件夹中的多个子文件共享同一根参考书目

我按照模块化方法创建了一个图书项目(多语言 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 中可用。LibraryTeXShop~\Library\TeXShop\Engines

完成所有这些步骤后,问题就解决了。我得到了一本完整的书,其中有每章的参考书目。如果一切都按照上面介绍的方式完成,那么流程如下:

  1. 创建和编辑文件
  2. 编译主文件
  3. 运行BIBunits.enginebibtex所有bu*aux文件)
  4. 编译主文件两次

相关内容