当文件包含在子目录中时,如何在使用 pdflatex 的 -output-directory 标志后运行 bibtex?

当文件包含在子目录中时,如何在使用 pdflatex 的 -output-directory 标志后运行 bibtex?

当我使用类似 的方法创建一个包含一个或多个子文档的主 pdflatex 文件\include{include/childdoc},然后使用 调用 pdflatex 时pdflatex -output-directory=out parent.tex,我似乎无法找到在生成的文件上调用 bibtex 的方法parent.aux。我尝试了 和,cd out; bibtex parentbibtex out/parent都无济于事。

我知道有各种各样的构建工具,但我首先想让它只从 shell 中工作,而不需要特殊的构建工具依赖。

答案1

好的,我终于明白了(不确定是否已在某处记录):

我需要明确创建out与我包含文件的目录同名的目录。然后,我需要在out运行 bibtex 时位于该目录中。此外,bibtex 文件需要手动复制到该out目录中。最后,我再次从顶级目录运行 pdflatex,再次使用 -output-directory 标志。

总结一下(从包含的目录开始parent.tex):

  1. mkdir out/include
  2. pdflatex -output-directory=out parent.tex
  3. cp mybib.bib out
  4. cd out ; bibtex parent
  5. cd .. ; pdflatex -output-directory=out parent.tex

(也许您需要再次运行 pdflatex,这取决于您使用的软件包……)

答案2

您可以使用环境变量 TEXMFOUTPUT 来指定 bibtex 文件的输出目录。对于您的情况,您可以创建如下 makefile:

all:
    mkdir out -p
    pdflatex -output-directory out parent.tex
    TEXMFOUTPUT="out:" bibtex out/parent
    pdflatex -output-directory out parent.tex
    pdflatex -output-directory out parent.tex

考虑一个更复杂的变体,其中您将源文件放在子目录中src。然后,您还将使用变量 BIBINPUTS 来指定 *.bib 文件的位置,并使用 BSTINPUTS 来指定 *.bst 文件的位置(参考书目样式)。然后 makefile 可能如下所示:

all:
    mkdir out -p
    TEXINPUTS="src:" pdflatex -output-directory out src/parent.tex
    BIBINPUTS="src:" BSTINPUTS="out:" TEXMFOUTPUT="out:" bibtex out/parent
    TEXINPUTS="src:" pdflatex -output-directory out src/parent.tex
    TEXINPUTS="src:" pdflatex -output-directory out src/parent.tex

答案3

如果您使用的是 TexStudio,有一个简单的方法可以做到。在 Preferences/Commands 中,build/%.aux如果您的 PdfLaTeX 输出文件夹名为 ,则可以将其添加到 BibTeX 行build

这对我来说是有效的,因为它与my_bibliography.bib我的 LaTeX 文件位于同一文件夹中,并且在我的 LaTeX 文件末尾使用以下内容。

\bibliographystyle{plain}
\bibliography{bibliography}

我想您可以找到其他编辑器/编译器的类似设置。

希望这可以帮助 !

答案4

您检查过辅助文件的位置吗?--output-directory 不会影响辅助文件(至少在 miktex 中不会。在 miktex 中,有 --aux-directory 开关用于设置辅助文件的目录)。此外 - 当您使用时\include:不要忘记它们将不止一个辅助文件。

相关内容