图像宏包括

图像宏包括

我想知道是否有解决方法或更好的方法来包含图像。我正在使用一个简单的宏来帮助我:

我的 main.tex

\documentclass{article}
  \usepackage{graphicx}
    \input{images.tex}
  \begin{document} 

   Hello! Look an awesome image Fig.\ref{fig:AwesomeImage_1_22.png}. 
   \fooFig{AwesomeImage_1_22.png} 

  \end{document}

我的 images.tex 包含:

\makeatletter
\newcommand{\DefinefooFig}[2]{%
                            \expandafter\newcommand\csname foofig#1\endcsname{#2}%
                            }
\newcommand{\fooFig}[1]{\csname foofig#1\endcsname}
\makeatother

\DefinefooFig{AwesomeImage_1_22.png}{
            \begin{figure}[p]
                \centering
                \includegraphics[width=0.8\textwidth]{image.png}
                \caption{Awesome Image}
                \label{fig:AwesomeImage_1_22.png}
            \end{figure}
 }

在我的主要内容文件中我可以包含\fooFig{AwesomeImage_1_22.png}以下内容,这有助于我保持章节干净、易读且小巧。

然而,我偶然发现许多论坛帖子不鼓励使用 \expandafter!所以我想问一下是否有更好的方法可以做到这一点!

最好的 -z

答案1

我认为这种方法不会给你带来太多好处,但你才是最好的评判者。我发现将标题放在外部文件中会使其难以修改。

除了过于夸张的缩进外,您的定义没有什么不好:

\newcommand{\DefinefooFig}[2]{%
  % define a new command to contain code for a figure
  \expandafter\newcommand\csname foofig#1\endcsname{#2}%
}
% define a command for inserting a figure
\newcommand{\fooFig}[1]{\csname foofig#1\endcsname}

\DefinefooFig{AwesomeImage_1_22.png}{%
  \begin{figure}[p]
  \centering
  \includegraphics[width=0.8\textwidth]{image.png}
  \caption{Awesome Image}
  \label{fig:AwesomeImage_1_22.png}
  \end{figure}%
}

%只需在我做过的地方添加即可。


\expandafter\newcommand\csname foofig#1\endcsname是正确的代码;要传递给的令牌\newcommand是在\newcommand生效之前创建的。

你可以使用

\newcommand\wordnewcommand[1]{\expandafter\newcommand\csname#1\endcsname}

\newcommand\DefinefooFig[2]{\wordnewcommand{foofig#1}{#2}}

但它只是语法糖。


稍微不同的方法允许您在运行时指定位置参数,而不是在外部文件中指定位置参数:

\newcommand{\DefinefooFig}[2]{%
  % define a new command to contain code for a figure
  \expandafter\newcommand\csname foofig#1\endcsname[1]{%
    \begin{figure}[##1]
    #2
    \end{figure}
  }%
}
% define a command for inserting a figure
\newcommand{\fooFig}[2][htp]{\csname foofig#2\endcsname{#1}}

\DefinefooFig{AwesomeImage_1_22.png}{%
  \centering
  \includegraphics[width=0.8\textwidth]{image.png}
  \caption{Awesome Image}
  \label{fig:AwesomeImage_1_22.png}
}

请注意,figure环境不再存在于 的代码中\DefinefooFig。这允许您拥有

\fooFig{AwesomeImage_1_22.png}

默认展示位置,或

\fooFig[!htbp]{AwesomeImage_1_22.png}

(当然,任何其他位置参数都可以)如果您想覆盖htp默认值。

相关内容