我以以下方式存储我的练习:
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
。
问题
- 如何设置多个选项命令来生成
texte.tex
目录中的pdf文件? - 如何使这个 pdf 文件独立于
main.tex
文件,也就是说,如果我将相同的文件包含texte.tex
在两个不同的文件中main.tex
,则不会生成新的 pdf 文件,从而不会再浪费时间?
答案1
我希望我完全理解了你的要求。开始吧。
\tikzexternalize
接受一个prefix
参数,该参数指示pdflatex
将外部化图形存储在何处。因此,即使您使用\input
inmain.tex
包含带有tikzpicture
s 的练习,您也可以设置prefix=<something>
inmain.tex
以pdflatex
告知外部化图形应存储在该目录中 - 具体来说,您希望它们存储在练习的目录中。您还可以通过将外部化图形保存在存储章节所有练习的子目录中,将代码与处理分开。在这里我使用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-figureX
的X
运行计数器。这不是您想要的;您想避免重新外部化。幸运的是,可以通过让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.tex
pdflatex -shell-escape
ex1fig1.pdf
tikzpicture
考虑到所有这些,您的主.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
,您需要做的就是将 设置graphicspath
为main.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}
我希望这至少有一定的意义并且确实正是你所要求的。