我之前曾在这里寻求过帮助以便使用带标签的 subfigimg:https://tex.stackexchange.com/questions/387837/how-to-use-subfigimg-macro-and-label。@Skillmon 帮助我解决了这个问题,但是在使用 subfigimg 时将 subfigimg 放入合并单元格时遇到了一个新问题,如下例所示:
\documentclass[preview,border=4mm]{standalone}
\usepackage{graphicx}
\usepackage{xparse}
\newcounter{subfigs}[figure]
\renewcommand*{\thesubfigs}{\thefigure.\alph{subfigs}}
\makeatletter
\NewDocumentCommand{\subfigimg}{s O{} m D<>{10pt} O{2\baselineskip} m}{%
\IfBooleanTF{#1}%
{\@subfigimg{#2}{#3}{#6}{0}{#4}{#5}}%
{\@subfigimg{#2}{#3}{#6}{1}{#4}{#5}}%
}
\newcommand*{\@subfigimg}[6]{%
\bgroup%
\advance\c@figure by #4%
\refstepcounter{subfigs}%
\ifx\relax#3\relax\else%
\label{#3}%
\fi%
\setbox1=\hbox{\includegraphics[#1]{#2}}% Store image in box
\leavevmode\rlap{\usebox1}% Print image
\rlap{\hspace*{#5}\raisebox{\dimexpr\ht1-#6\relax}{(\alph{subfigs})}}% Print label
\phantom{\usebox1}% Insert appropriate spcing
\egroup%
}
\makeatother
\begin{document}
\begin{figure}
\centering
\begin{tabular}{p{0.5\linewidth}@{}p{0.5\linewidth}}
\subfigimg[width=\linewidth]{example-image-a}{fig:s11}
&
\subfigimg[width=\linewidth]{example-image-b}{fig:s12}\\
\multicolumn{2}{c}{\subfigimg[width=0.5\linewidth]{example-image-c}<30pt>[3\baselineskip]{}}
\end{tabular}
\caption{bla bla bla}
\label{fig:1}
\end{figure}
See subfigures \ref{fig:s11} and \ref{fig:s12} of figure~\ref{fig:1}
\end{document}
在这里,最后一个图像标签无法正常工作,因为位置不对。我尝试使用位置选项 (<30pt>[3\baselineskip]) 来解决这个问题,虽然它确实水平移动,但不会垂直移动。即,更改 <30pt> 将移动标签,但不会更改 [3\baselineskip]。
如果有人能解决这个问题就太好了。
答案1
在表格的标题中,您定义了两个像\parbox
( \begin{tabular}{p{0.5\linewidth}@{}p{0.5\linewidth}}
) 一样的列。现在,您有一个\multicolumn
重新定义列类型 ( \multicolumn{2}{c}{image}
) 的列。与其他列相反,这是一个不允许换行的普通列 - 因此,插入的任何垂直空格都\subfigimg
将被忽略。
诀窍是让此单元格再次兼容多行。基本上,您要么\parbox
在列定义中使用 并放在\centering
子图前面,要么保留当前列定义并将子图放在 中\parbox
:
\documentclass[preview,border=4mm]{standalone}
\usepackage{graphicx}
\usepackage{xparse}
\newcounter{subfigs}[figure]
\renewcommand*{\thesubfigs}{\thefigure.\alph{subfigs}}
\makeatletter
\NewDocumentCommand{\subfigimg}{s O{} m D<>{10pt} O{2\baselineskip} m}{%
\IfBooleanTF{#1}%
{\@subfigimg{#2}{#3}{#6}{0}{#4}{#5}}%
{\@subfigimg{#2}{#3}{#6}{1}{#4}{#5}}%
}
\newcommand*{\@subfigimg}[6]{%
\bgroup%
\advance\c@figure by #4%
\refstepcounter{subfigs}%
\ifx\relax#3\relax\else%
\label{#3}%
\fi%
\setbox1=\hbox{\includegraphics[#1]{#2}}% Store image in box
\leavevmode\rlap{\usebox1}% Print image
\rlap{\hspace*{#5}\raisebox{\dimexpr\ht1-#6\relax}{(\alph{subfigs})}}% Print label
\phantom{\usebox1}% Insert appropriate spcing
\egroup%
}
\makeatother
\begin{document}
\begin{figure}
\centering
\begin{tabular}{p{.5\linewidth}@{}p{.5\linewidth}}
\subfigimg[width=\linewidth]{example-image-a}{fig:s11}
&
\subfigimg[width=\linewidth]{example-image-b}{fig:s12}\\
\multicolumn{2}{c}{\parbox{.5\linewidth}{\subfigimg[width=\linewidth]{example-image-c}<30pt>[3\baselineskip]{}}}\\
\multicolumn{2}{p{\linewidth}}{\centering\subfigimg[width=0.5\linewidth]{example-image-c}<30pt>[3\baselineskip]{}}\\
\end{tabular}
\caption{bla bla bla}
\label{fig:1}
\end{figure}
See subfigures \ref{fig:s11} and \ref{fig:s12} of figure~\ref{fig:1}
\end{document}