我正在尝试显示具有相似名称的多幅图像,但无论我如何尝试,最后一行的对齐似乎都是错误的:
\documentclass[12pt]{article}
\usepackage{subcaption,graphicx}
\newcounter{i}
\begin{document}
\begin{figure}
\centering
\makeatletter
\setcounter{i}{0}
\@whilenum\value{i}<9\do {
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{test_\thei}
\end{subfigure}%
\stepcounter{i}
}
\makeatother
\end{figure}
\end{document}
答案1
在结束括号后添加并保护其他结束线。顺便说一句,此应用程序\unskip
不需要。subfigure
\documentclass[12pt]{article}
\usepackage{graphicx}
\newcounter{i}
\begin{document}
\begin{figure}
\centering
\makeatletter
\setcounter{i}{0}%
\@whilenum\value{i}<9\do {%
\includegraphics[width=0.3\textwidth]{example-image-1x1}%
\stepcounter{i} % <--- note the space before %
}\unskip
\makeatother
\end{figure}
\end{document}
将图像的文件名改回。
后面的空格\stepcounter{i}
会在输出中产生一个空格,而您需要删除最后一个空格。如果单个空格不够,请执行
\stepcounter{i}\quad
或者
\stepcounter{i}\hspace{<whatever lenght you want>}% <--- the % is necessary
不同的实现:
\documentclass[12pt]{article}
\usepackage[draft]{graphicx}
\usepackage{showframe}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\integercaseTF}{mm+m+m}
{
\int_case:nnTF { #1 } { #2 } { #3 } { #4 }
}
\NewDocumentCommand{\intloop}{O{1}+mO{1}+m}
{
\int_step_inline:nnnn { #1 } { #3 } { #2 } { #4 }
}
\ExplSyntaxOff
\begin{document}
\begin{figure}[htp]
\centering
\setlength{\lineskip}{0.025\columnwidth}
\intloop{9}{%
\includegraphics[width=0.3\columnwidth]{test-#1}%
\integercaseTF{#1}{{3}{\\} {6}{\\} {9}{\\}}{}{\hfil}%
}
\end{figure}
\end{document}
该\integercaseTF
命令接受四个参数:第一个参数是一个整数表达式,这里是循环中的当前整数;第二个参数是一个案例列表,在本例中,我们说如果循环中的当前整数是 3、6 或 9,那么\\
应该发出;第三个参数是在匹配的情况下要执行的附加代码;第四个参数是在不匹配的情况下要执行的附加代码,在本例中我们想要\hfil
。
循环中的当前整数可#1
在代码 for 中使用\intloop
,其语法为
\intloop[<optional start>]{<mandatory end>}[<optional step>]{<code>}
因此,例如,\intloop[0]{5}[2]{...}
将针对整数值 0,2,4 执行...
(因为我们要求上升到 5,从 0 开始,步骤 2)。
设置为\lineskip
是0.025\columnwidth
为了使块中的连续图片之间的垂直空间与水平空间一样多。图片占据了 90% 的水平空间,我们希望将剩余空间分成四等份,因此 也应该\lineskip
是文本宽度的 2.5%。
`showframe 只是为了更好地看到上下文中的空白。
答案2
或者,使用内循环一次插入 3 个子图,然后添加一个\par
。
\documentclass[12pt]{article}
\usepackage{subcaption,graphicx}
\newcounter{i}
\newcounter{j}
\begin{document}
\begin{figure}
\centering
\makeatletter
\setcounter{i}{0}
\@whilenum\value{i}<3\do {
\setcounter{j}{0}
\@whilenum\value{j}<3\do {%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image}
\end{subfigure}%
\stepcounter{j}
\stepcounter{i}
}
\par
}
\makeatother
\end{figure}
\end{document}