我正在尝试创建一个主要包含图像(但偶尔在图像后包含一些文本)的 LaTeX 文档。我目前在序言中有以下内容:
\def \ifempty#1{\def\temp{#1} \ifx\temp\empty }
\newcommand{\image}[2]{
\ifempty{#2}
\begin{figure}[H]
\includegraphics[width=\textwidth]{#1}
\end{figure}
\else
\begin{figure}[H]
\includegraphics[width=\textwidth]{#1}
\caption*{\textit{\Large{#2}}}
\end{figure}
\fi
}
然后当我添加图像时我使用:
\image{imageName}{optionalText}
这会在图像之间插入大量空白。我希望每幅图像都紧挨着下一幅图像,除非图像无法在页面上显示,在这种情况下会创建一个新页面(基本上,我希望图像的排列方式与其他任何默认方式相同)。
我尝试按照建议更改[H]
选项caption
这个问题并尝试了各种建议叶上也这篇 WikiBooks 文章,但无法使图像正常流动。
如何才能使图像正常流动?
答案1
\def \ifempty#1{\def\temp{#1} \ifx\temp\empty }
每次使用时,总是会在输出中添加一个空格标记,这是你打算
\def \ifempty#1{\def\temp{#1}\ifx\temp\empty }
但是,这样定义通常并不安全,\if
因为它是一个宏,而不是一个 tex,所以如果与\if..
其他宏结合,它就不会自然起作用。if
\iffalse
\ifempty{}
yes
\else
no
\fi
\fi
看起来嵌套得很好,但\ifempty
不会被视为如果那么\iffalse
将匹配\else
排版no
,第二个\fi
将产生错误。
对于您的主宏,我将省略figure
仅添加垂直空间的环境。
\newcommand{\image}[2]{%
\par
\noindent
\begin{minipage}{\textwidth}%
\includegraphics[width=\textwidth]{#1}%
\par
{\Large\itshape #2\par}%
\end{minipage}%
\par
}
使用这种形式你不需要测试是否#2
为空因为在这种情况下它不会做任何事情。