pdflatex / xelatex -使用 \include 时的输出目录和子目录

pdflatex / xelatex -使用 \include 时的输出目录和子目录

当我使用 包含子目录中的文件\include{subdir/sub}并使用 编译该文件时pdflatex -output-directory .tex_test/ main.texpdflatex会提示无法写入.tex_test/subdir/sub.aux。 ( 也会出现同样的情况xelatex

有没有办法自动在 中创建必要的文件结构output-directory?当然也可以,如果sub.aux直接写入.tex_test/,但我猜那是不可能的......

完整 MWE: ./main.tex包含:

\documentclass{article}
\begin{document}
Main Document

\include{subdir/sub}
\end{document}

并且./subdir/sub.tex包含任何内容。更重要的是目录.tex_test/存在。

答案1

只需在不可见目录中重新创建与“可见”目录相同的树:我尝试过并且subdir在里面创建一个目录.tex_test就成功了。

其实我改了名字,但还是一样。以下是日志

This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
 restricted \write18 enabled.
entering extended mode
(./canasub.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2012-05-30, ngerman-x-2012-05-30, afrikaans, ancientgreek, ibycus, arabi
c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
h, french, friulan, galician, german, ngerman, swissgerman, monogreek, greek, h
ungarian, icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, ma
rathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian, 
kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk,
 polish, portuguese, romanian, romansh, russian, sanskrit, serbian, serbianc, s
lovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, uppersorbian, 
welsh, loaded.
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
(.canaout/canasub.aux (.canaout/canasub/sub.aux)) [1{/usr/local/texlive/2012/te
xmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./canasub/sub.tex) [2]
(.canaout/canasub.aux (.canaout/canasub/sub.aux)) )</usr/local/texlive/2012/tex
mf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on .canaout/canasub.pdf (2 pages, 13249 bytes).
Transcript written on .canaout/canasub.log.

如您所见,sub.aux文件是从.canasub/canasub


启用 shell 转义后,您可以创建目录:

\documentclass{article}

\makeatletter
\let\latex@include\include
\def\include#1{\include@aux#1\@nil}
\def\include@aux#1/#2\@nil{\@mkdir{#1}\latex@include{#1/#2}}
\ifnum\pdfshellescape=\@ne
  \def\@mkdir#1{\immediate\write18{mkdir -p .tex_test/#1}}
\else
  \def\@mkdir{\typeout{Expect errors}}
\fi

\begin{document}
Main Document

\include{canasub/sub}
\end{document}

这里我假设一个 Unix 系统(我不知道如何在 Windows 上创建目录)并且所有\include命令都具有相同的结构

\include{subdir/file}

处理不同的模式应该相当容易。当然你必须添加-shell-escape的调用pdflatex

然而该.tex_test部分必须硬编码,因为 TeX 没有输出目录的内部知识。

答案2

WinEdt 7 能够自动完成您需要的操作。

只需TeXAux在主文件夹中创建一个名为的子文件夹,WinEdt 就会自动创建子文件夹。

您甚至不需要传递-output-directory到命令行。

答案3

我对 LaTeX 文档使用 Makefile。此命令在输出目录中创建根目录的目录结构:

mkdir -p ${OUTPUTDIRECTORY}
for DIR in $(shell find . -maxdepth 1 -mindepth 1 -type d -exec basename '{}' \;) ; do      mkdir -p ${OUTPUTDIRECTORY}/$$DIR ;     done

-maxdepthfind定义查找目录的深度。我从这里

使用 Rakefile 或 Python 脚本可能会使这更容易。似乎没有办法pdflatex自动创建必要的目录。

相关内容