我的 Tex 文件非常混乱,因为其中包含多个较长的 TikZ 代码。当涉及到 TikZ 时,您如何组织文件?
答案1
与任何 TeX 代码一样,你可以将 TikZ 图片环境放入自己的文件中,然后使用(切勿使用).tex
将它们加载到文档中。因为我在撰写论文时遇到了与你类似的问题,所以我写了\input{<filename>}
\include
standalone
类和包允许您为这些文件添加完整的前言并自行编译它们,同时仍然能够将\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,我使用了以下方法。
我使用创建它们韓國我将它们保存在相应的文件夹中。注意:每个 tikz 文件只包含
\begin{tikzpicture}...\end{tikzpicture}
。而不是序言!两者都不\begin{document}
包含\end{document}
您可以找到一个例子这里。我创建了一个名为的文件,
tikz_preamble.tex
其中包含编译 tikz 图形所需的前言,并且\begin{document}
-\end{document}
。您可以找到一个例子这里。最后我写了一篇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 将其置于内联中。