main.tex

main.tex

我以以下方式存储我的练习:

  • Base_Exos指向变量的超级目录$TEXINPUTS
  • 子目录,按类别划分。
  • 子目录,按章节分类
  • 子子子目录,按练习一个接一个。此 SSS 目录包含调用的文本texte.tex,最终调用的更正corrige.tex,以及最终的一些图片。

我可以使用 main.tex 文件中的任何练习,但远非如此Base_Exos

\input{3_eme/Droites/exo-002/texte}

如果这texte.tex包含图片引用,则是:

\includegraphics{3_eme/Droites/exo-002/picture-1}

现在,我想使用它external tikz library并且它仍然与我的个人目录系统兼容,并且我不想外部化所有的 tikzpicture,只想外部化那些较重的。

也就是说,希望外部化程序生成的 pdf 图片和文件存储在同一目录中texte.tex,而不是在文件所在的目录中main.tex

到目前为止,我做了main.tex

My pranbule
\usetikzlibrary{external}
\tikzexternalize % activate
\tikzexternaldisable % disable for most pictures
\begin{document}
\input{3_eme/Droites/exo-002/texte}
\end{document}

3_eme/Droites/exo-002/texte文件中

...
\tikzexternaldisable
\begin{tikzpicture}
...
\end{tikzpicture}
\tikzexternaldisable
...

但是pdf是在main.tex文件目录中生成的,而不是在文件目录中生成的texte.tex

问题

  1. 如何设置多个选项命令来生成texte.tex目录中的pdf文件?
  2. 如何使这个 pdf 文件独立于main.tex文件,也就是说,如果我将相同的文件包含texte.tex在两个不同的文件中main.tex,则不会生成新的 pdf 文件,从而不会再浪费时间?

答案1

我希望我完全理解了你的要求。开始吧。

\tikzexternalize接受一个prefix参数,该参数指示pdflatex将外部化图形存储在何处。因此,即使您使用\inputinmain.tex包含带有tikzpictures 的练习,您也可以设置prefix=<something>inmain.texpdflatex告知外部化图形应存储在该目录中 - 具体来说,您希望它们存储在练习的目录中。您还可以通过将外部化图形保存在存储章节所有练习的子目录中,将代码与处理分开。在这里我使用external作为目录。

% Macro holding the exercises directory name (in main.tex).
\newcommand{\exercisesdirectory}{aclass/achapter/exercises/}
% Macro holding the externalized sub-directory (in main.tex).
\newcommand{\externaldirectory}{aclass/achapter/exercises/external/}
\usepackage{tikz}
\usetikzlibrary{external}
% All externalized graphics go go the \externaldirectory
\tikzexternalize[prefix=\externaldirectory]
% Externalise only on-demand.
\tikzexternaldisable

但是,有一个警告:如果您的主文件并非始终命名为main.tex,那么external库将使用新文件名重新外部化图形(我相信格式是从 0 开始\jobname-figureXX运行计数器。这不是您想要的;您想避免重新外部化。幸运的是,可以通过让pdflatex外部化图形知道应该使用什么名称来轻松规避此问题\tikzsetnextfilename

\tikzexternalenable
\tikzsetnextfilename{ex1fig1} % This graphic will always be named ex1fig1.
\begin{tikzpicture}
  % Move along. Nothing to see here.
\end{tikzpicture}%
\tikzexternaldisable

这意味着,如果此练习\input在一个文件中,并且是一个用 编译的main.tex文件中,则外部库仅在图形不存在时(或者环境中发生了某些变化等)才创建图形。file.texpdflatex -shell-escapeex1fig1.pdftikzpicture


考虑到所有这些,您的主.tex文件将如下所示:

main.tex

\documentclass{article}

% The path to the exercises.
\newcommand{\exercisesdirectory}{aclass/achapter/exercises/}
% The path where externalised graphics will be stored.
\newcommand{\externaldirectory}{aclass/achapter/exercises/external/}
% Will be used to store the path to the exercise to be processed.
\newcommand{\pathtoexercise}{}

\usepackage{tikz,pgfplots}
\usetikzlibrary{external}
% All auxiliary files and externalised graphics go to \externaldirectory.
\tikzexternalize[prefix=\externaldirectory]
% Only externalise on-demand.
\tikzexternaldisable

% In case you want to include externalised graphics directly.
\graphicspath{ {\externaldirectory} }

\begin{document}
% This will combine the \exercisesdirectory and "firstexercise.tex" strings,
% and store them in \pathtoexercise.
\expandafter\def\expandafter\pathtoexercise\expandafter{\exercisesdirectory firstexercise.tex}
% Then we simply input \pathtoexercise.
\input{\pathtoexercise}
\end{document}

firstexercise.tex存储在哪里aclass/achapter/exercises/

firstexercise.tex

This is some text from the first exercise. Below are some cool graphics.

\tikzexternalenable
\tikzsetnextfilename{ex1fig1}
\begin{tikzpicture}
  \begin{axis}[%
    scale only axis,
    width=5cm,
    height=5cm,
  ]

    \addplot[red,samples=10] {rnd};

  \end{axis}
\end{tikzpicture}%
\tikzexternaldisable

如果您只想包含外部图形而不是整个firstexercise.tex,您需要做的就是将 设置graphicspathmain.tex\externaldirectory如下所示:\graphicspath{ {\externaldirectory} }。此后,您只需使用\includegraphics图形文件名,如下所示:

% \includegraphics will automatically search in the graphicspath directory.
\begin{figure}
\centering
\includegraphics{ex1fig1.pdf} % This is actually in aclass/achapter/exercises/external/ex1fig1.pdf
\caption{Exercise $1$, Figure $1$}
\label{fig:ex1fig1}
\end{figure}

我希望这至少有一定的意义并且确实正是你所要求的。

相关内容