我想知道是否有解决方法或更好的方法来包含图像。我正在使用一个简单的宏来帮助我:
我的 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
默认值。