外包 TikZ 代码

外包 TikZ 代码

我的 Tex 文件非常混乱,因为其中包含多个较长的 TikZ 代码。当涉及到 TikZ 时,您如何组织文件?

答案1

与任何 TeX 代码一样,你可以将 TikZ 图片环境放入自己的文件中,然后使用(切勿使用).tex将它们加载到文档中。因为我在撰写论文时遇到了与你类似的问题,所以我写了\input{<filename>}\includestandalone类和包允许您为这些文件添加完整的前言并自行编译它们,同时仍然能够将\input它们放入主文档中而无需进行任何更改。

我组织 TikZ 图片的具体方式如下:

  • 每个 TikZ 图片一个 .tex 文件。
  • 这些文件包含一个完整的前言,它加载所有需要的包和库并使用该类standalone
  • 这些文件可以位于子目录中,例如figures
  • 在主文档中我加载standalone 包裹以及\input我想要的 TikZ 图片的位置,例如在figure环境内部。
  • 的新版本standlone还提供了一个\includestandalone[<options>]{<filename>}可以代替的宏,\input但允许您使用与 相同的选项\includegraphics,例如调整大小和旋转内容等。
  • 也可以将所有 TikZ 文件编译为单个 PDF 并将其包含在文档中。这可以显著加快编译过程(当然,第一个除外)。
  • 对于现有文档,您也可以将每个 TikZ 图片复制到单个.tex文件中,无需前言,只需\input复制一个即可。但是,standalone这给您带来了很大的好处,即能够单独编译 TikZ 图片。这在编码图片时节省了大量时间。

例子

Tikz 图片:

% Tikz File 'mytikz.tex'
\documentclass{standalone}
\usepackage{tikz}
%\usetikzlibrary{...}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) -- (1,1);
  %%%
\end{tikzpicture}
\end{document}

主要文件:

% Main document
\documentclass{book}
% Repeat required preamble stuff or use `subpreambles` option of the `standalone` package
\usepackage{tikz}
%\usetikzlibrary{...}
\usepackage{standalone}
\begin{document}
Text ...
\begin{figure}
  \includestandalone[width=\textwidth]{mytikz}%     without .tex extension
  % or use \input{mytikz}
  \caption{My TikZ picture}
  \label{fig:tikz:my}
\end{figure}
\end{document}

查看standalone手动的了解更多信息。还有更多选项和功能。

答案2

我将尝试描述我在硕士论文中使用的方法。由于我有很多 tikz 图形,因此编译时间很长。为了减少时间,我决定将它们编译为独立的 pdf 并使用\includegraphics{}(Martin 的回答已经提到了这一点 - 我只是在详细说明)。

为了做到这一点,我遵循了以下方案:

$ tree
.
├── chap1
│   ├── chap1.tex
│   └── figures
│       ├── figure1.tikz
│       └── figure2.tikz
├── chap2
│   ├── chap2.tex
│   └── figures
│       ├── figure1.tikz
│       └── figure2.tikz
├── main.tex
└── tikz_preamble.tex

因此,我为每个章节创建了一个文件夹,其中包含一个 tex 文件和一个包含 tikz 文件的子文件夹。在我的文件夹中,我main.tex使用了import包,并使用命令\subimport{chap1/}{chap1.tex}来包含每个章节的 tex 文件。在每个章节的 tex 文件中,我只是使用\includegraphics{figures/figure1.pdf}

现在,为了创建 tikz 图形并将其转换为 pdf,我使用了以下方法。

  1. 我使用创建它们韓國我将它们保存在相应的文件夹中。注意:每个 tikz 文件只包含\begin{tikzpicture}...\end{tikzpicture}。而不是序言!两者都不\begin{document}包含\end{document}您可以找到一个例子这里

  2. 我创建了一个名为的文件,tikz_preamble.tex其中包含编译 tikz 图形所需的前言,并且\begin{document}-\end{document}。您可以找到一个例子这里

  3. 最后我写了一篇python 脚本它将以递归方式搜索*.tikz扩展名为 的文件,并使用 编译它们tikz_preable.tex。在后续运行中,只会编译新创建的文件和有更改的文件。这些*.pdf文件与文件创建在同一个文件夹中*.tikz。因此figures文件夹将如下所示:

    └── figures
        ├── figure1.pdf
        ├── figure1.tikz
        ├── figure2.pdf
        └── figure2.tikz
    

将 tikz 文件前言保存为单独的文件似乎不方便,但它可以提供更大的灵活性。如果您决定对前言进行重大更改(例如更改字体或字体大小 - 这实际上发生在我身上,在演示的前一天!)那么您所要做的就是调整tikz_preamble并使用某个命令行参数调用脚本,它将毫不费力地更新您的所有 tikz 文件。

PS. 我有兴趣阅读其他人的工作流程。

答案3

当然,我无法与马丁的回答相媲美:)但我有一个不同的方法,其中不包括使用“另一个”附加包(你知道我的意思)。

生成的文件

首先——结果如下:

在此处输入图片描述

文件夹结构截图

这是我的简化的文件夹结构

在此处输入图片描述

每个文件夹的内容是

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

主文件

主文件如下所示:

\documentclass[parskip]{scrartcl}
% The Usual Suspects
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage{float}
\usepackage{lmodern}
% Nice Captions for Tables and Figures etc.
\usepackage[%
    font={small,sf},
    labelfont=bf,
    format=hang,
]{caption}
\usepackage{tikz}

% For Random Text
\usepackage{blindtext}

% Load Custom Styles
\input{TikZ-Styles/myUnitStyle.tex}
\input{TikZ-Styles/myLineStyle.tex}
\input{TikZ-Styles/myColorStyle.tex}
\input{TikZ-Styles/myGrayStyle.tex}

% -------------------------- Start Document --------------------------
\begin{document}

\section*{Test Section}

\blindtext

% That's all!
\input{Figures-Input-Code/fig_Squares.tex}

\blindtext

\end{document}
% -------------------------- End Document --------------------------

图形输入代码

图形输入代码如下所示:

\begin{figure}[H]
\centering
\input{TikZ-Code/Code_Squares.tex}
\caption{Example TikZ picture that has nothing special to offer.}
\label{fig_Squares}
\end{figure}

标签图中总是有文件名图形输入代码文件。在本例中,文件名为fig_Squares.tex。所以我有一个一致的原则。TikZ 代码归档也分享文件名——但前缀是Code。因此这里是Code_Squares.tex

TikZ 代码

TikZ 代码如下所示:

\begin{tikzpicture}[myUnitStyle,myLineStyle]
\draw [myColorStyle] (0,0) rectangle (10,10);
\draw [myGrayStyle] (12,0) rectangle (22,10);
\end{tikzpicture}

TikZ 样式

TikZ 样式如下所示:

\tikzset{myColorStyle/.style={fill=yellow,draw=red}}

\tikzset{myGrayStyle/.style={fill=gray,draw=black}}

\tikzset{myLineStyle/.style={line width=2pt}}

\tikzset{myUnitStyle/.style={x=1mm,y=1mm}}

文件名对于风格反映的名字风格, 如你看到的。

优点

我认为有以下优点

  • 精简、整洁的主文档
  • 你无需担心如何命名/标记图形
  • 很容易在其他文档中重复使用代码
  • 通过注释命令可以很容易地只编译部分内容\input——这也使得调试更容易
  • 你不需要为每个 TikZ 图片添加单独的前言——如果你需要更改它或者想要在其他文档中重复使用代码,我想编辑每个前言会很烦人

当然 Martins 的解决方案更好。但根据我的经验,如果新 LaTeX 用户不需要了解额外的软件包,他们会很高兴。

答案4

您可以创建包含以下内容的样式表 commandsty.sty:

\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{commandpackage}
  [2014/12/09 v0.01 LaTeX package for my own purpose]

\RequirePackage{tikz}

\newcommand{\tikzpic}[1][fill=black]{\begin{tikzpicture}

\end{tikzpicture}
}

\endinput

然后,您只需在主 tex 文件中使用 \usepackage{commandpackage} 即可将其包含。然后,您只需使用 \tikzpic 将其置于内联中。

相关内容