如何管理单个文件中的图片以便主文件轻松挑选?

如何管理单个文件中的图片以便主文件轻松挑选?

我正在写一篇包含许多 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
 }

相关内容