我正在编写说明书,我不能使用图片,因为图片需要直接位于它们所显示的步骤下方。为了让图片位于相应的文本下方,每当我想放置图片时,我都会使用以下代码。
\begin{minipage}{1\linewidth}
\vspace{5mm}
\centering
\includegraphics[width=1\textwidth]{database}
\captionof{figure}{Desktop icon of simulator app}
\end{minipage}
我不喜欢的事情(作为程序员和人类)是,为了在图形上方获得垂直填充/空间,我每次都需要使用 vspace 并指定空间。
有没有办法可以配置所有 minipage 使其上方具有相同的 vspace?并且最好甚至不在 minipage 中包含 vspace 命令?
谢谢!
答案1
我建议你这样做不是重新定义minipage
环境本身:您可能仍需要原始版本来做其他事情。相反,定义一个执行您想要的操作的命令,即插入带有标题的插图。正如@Bernard曾指出,实际上不需要minipage
:一个center
环境就可以了。我做了一个微小的低级定制,以确保在插图之前不会出现分页符:这enumitem
也可以通过包来实现,但我不太愿意为了这个微小的调整而加载整个包……
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
\usepackage{graphicx}
\usepackage{capt-of}
\usepackage{mwe} % for this Minimal Working Example only
\makeatletter
\newcommand*\illustration[2]{%
% keep illustration on the same page as preceding text:
\begingroup
\@beginparpenalty \@M
\begin{center}%
\includegraphics[width=\linewidth]{#1}%
\captionof{figure}{#2}%
\end{center}%
\endgroup
}
\makeatother
\begin{document}
\lipsum[1]
\illustration{image-a}{The letter~``A''}
\lipsum[2]
\illustration{image-b}{The letter~``B''}
\lipsum[2]
\illustration{image-c}{The letter~``C''}
\lipsum[4]
\end{document}
编辑: 再想想,一个minipage
环境是由于\captionof
命令的实现方式,需要避免图像和其标题之间可能出现的分页符。以下是考虑到此问题的不同解决方案:
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
\usepackage{graphicx}
\usepackage{capt-of}
\usepackage{mwe} % for this Minimal Working Example only
\makeatletter
\newcommand*\illustration[2]{%
\par % end previous paragraph (if necessary)
\addpenalty{\@M}% prohibit page break
\addvspace{\bigskipamount}% or "\medskipamount"...
\noindent
\begin{minipage}{\linewidth}%
\centering
\includegraphics[width=\textwidth]{#1}%
\captionof{figure}{#2}%
\end{minipage}\par
\addpenalty{-\@lowpenalty}%
\addvspace{\bigskipamount}%
}
\makeatother
\begin{document}
\lipsum[1]
\illustration{image-a}{The letter~``A''}
\lipsum[2]
\illustration{image-b}{The letter~``B''}
\lipsum[2]
\illustration{image-c}{The letter~``C''}
\lipsum[4]
\end{document}
答案2
对于小页面之前的空间,您不需要更改minipage
定义。借助etoolbox
宏\BeforeBeginEnvironment
,您可以添加所需的空间:
\documentclass[12pt,a4paper]{article}
\usepackage[demo]{graphicx}
\usepackage{caption}
\setlength{\parindent}{0in}
\usepackage{etoolbox} % <---
\BeforeBeginEnvironment{minipage}{\par\vspace{5mm}} % <---
\usepackage{lipsum}
\begin{document}
\lipsum[11]
\begin{minipage}{\linewidth}
\includegraphics[width=\linewidth]{database}
\captionof{figure}{Desktop icon of simulator app}
\end{minipage}
\end{document}
答案3
您可以通过以下三行重新定义minipage
环境以包含您需要的内容:vspace
\let\oldminipage=\minipage
\let\endoldminipage=\endminipage
\renewenvironment{minipage}{\vspace{5mm}\begin{oldminipage}}{\end{oldminipage}}
由于您没有提供示例,因此我提供了一个我自己的示例。以下是原始输出minipage
和重新定义的输出,以供比较。如果您暂时需要恢复原始行为,只需使用\begin{oldminipage} .. \end{oldminipage}
。
\documentclass[12pt,a4paper]{article}
\usepackage[demo]{graphicx}
\usepackage{capt-of}
\setlength{\parindent}{0in}
\begin{document}
Some text here ...
\begin{minipage}{\linewidth}
\centering
\includegraphics[width=1\textwidth]{database}
\captionof{figure}{Desktop icon of simulator app}
\end{minipage}
\let\oldminipage=\minipage
\let\endoldminipage=\endminipage
\renewenvironment{minipage}{\vspace{5mm}\begin{oldminipage}}{\end{oldminipage}}
\bigskip
Some text here ...
\begin{minipage}{\linewidth}
\centering
\includegraphics[width=1\textwidth]{database}
\captionof{figure}{Desktop icon of simulator app}
\end{minipage}
\end{document}