我正在写一篇包含许多 TikZ 图片的论文。为了保持主文件的可读性,我将图片保存为单独的文件,但不幸的是,我现在的文件太多了。有什么好的解决方案可以将所有图片保存在一个文件中(与主文件分开),为它们命名,然后从主文件中调用它们?
答案1
在主文件所在的同一文件夹中创建自己的包,即mypictures.sty
。为每个图片定义一个唯一的命令,如下所示:
% ========================================================
% Copyright (c) 2011 xport. All rights reservered.
% LPPL LaTeX Public Project License
% ========================================================
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{mypictures}[2011/06/04 v0.01 LaTeX package for my own purpose]
\RequirePackage{pstricks}
\newcommand{\myGrid}{%
\begin{figure}
\centering%
\begin{pspicture}[showgrid=true](-2,-2)(2,2)
\end{pspicture}
\end{figure}}
\newcommand{\myLine}{%
\begin{figure}
\centering%
\begin{pspicture}[showgrid=true](-2,-2)(2,2)
\psline(2,2)
\end{pspicture}
\end{figure}}
\endinput
% mypictures.sty
在序言中,放入\usepackage{mypictures}
现在您可以从主文件中调用图片,如下所示:
\documentclass{article}
\usepackage{mypictures}
\begin{document}
\myGrid
\myLine
\end{document}
优点:您将获得编译名称检查,以确保每张图片都有一个唯一的名称。:-)
答案2
将它们存储在宏中,然后存储在input
文件中。
在下面的简单示例中,我提供了一个\CommandFactory
宏来自动化该过程。您还可以将所有名称存储在列表中,并使用循环列出所有名称(在起草文档时很有用)。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\makeatletter
\gdef\alist{}
\def\addtolist#1#2{\g@addto@macro{#1}{#2,}}
\def\CommandFactory#1#2{%
\expandafter\def\csname#1\endcsname{#2}
\addtolist{\alist}{#1}
}
\CommandFactory{bar}{\tikzpicture
\axis[stack plots=y]
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)};
\endaxis
\endtikzpicture}
\CommandFactory{foo}{\tikzpicture
\axis[stack plots=y]
\addplot coordinates
{(0,1) (1,1) (2,2) (5,2)};
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)};
\endaxis
\endtikzpicture}
%loop through all the records
\foo
\bar
\@for \i:=\alist \do{%
\@nameuse{\i}
}
\makeatother
\end{document}
按照 xport 的建议,您可以通过将 替换为以下内容来捕获重复的名称错误
\CommandFactory
:
\def\CommandFactory#1#2{%
\ifcsname#1\endcsname
\PackageError{}{Duplicate plot name in
\protect\CommandFactory}{Take a break!}
\else
\expandafter\def\csname#1\endcsname{#2}
\addtolist{\alist}{#1}
\fi
}