合并单元格时使用 subfigimg 的问题

合并单元格时使用 subfigimg 的问题

我之前曾在这里寻求过帮助以便使用带标签的 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}

相关内容