![如何使用 subfigimg 宏和 \label](https://linux22.com/image/360668/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20subfigimg%20%E5%AE%8F%E5%92%8C%20%5Clabel.png)
我正在使用此处提供的宏子图邮政运行良好。但我的问题是我想 \ref 其中一个子图(使用 subfigimg 宏),但我不知道该怎么做。
举个例子,我想做这样的事情:
\documentclass{revtex4-1} % http://ctan.org/pkg/ltxutil
\usepackage{graphicx} % http://ctan.org/pkg/graphicx
\newcommand{\subfigimg}[3][,]{%
\setbox1=\hbox{\includegraphics[#1]{#3}}% Store image in box
\leavevmode\rlap{\usebox1}% Print image
\rlap{\hspace*{10pt}\raisebox{\dimexpr\ht1-2\baselineskip}{#2}}% Print label
\phantom{\usebox1}% Insert appropriate spcing
}
\begin{document}
\begin{figure}[H]
\centering
\begin{tabular}{p{0.5\linewidth}@{}p{0.5\linewidth}}
\subfigimg[width=\linewidth]{(a)}{example-image-a}
\label{fig:1} &
\subfigimg[width=\linewidth]{(b)}{example-image-b}
\label{fig:2}
\end{tabular}
\caption{bla bla bla}
\end{figure}
\end{document}
这当然不起作用,结果是??而不是数字。有没有办法解决这个问题?或者在宏中添加标签选项?
我对 tex 和这个论坛还很陌生,所以如果我犯了任何错误,请原谅我的菜鸟身份。
谢谢,liron
答案1
我构建了一些东西,它是 a) 完整的 MWE,并且 b) 可以实现您想要的功能。
现在标签显示为“1.a”,字母变为小写字母。如果您想更改子图标签的格式,请根据\renewcommand*{\thesubfigs}
自己的喜好更改,请注意,这只会更改标签的显示方式,而不会更改图像内的标签,为此,请更改\alph{subfigs}
定义中的\@subfigimg
。
该命令\subfigimg
有带星号和不带星号的版本。如果您\caption
在 之前使用 图形环境,请使用带星号的版本,在 之前使用不带星号的版本。这是必要的,因为如果在 之后使用 ,\subfigimg
我们必须c@figure
暂时增加 -counter 才能获得正确的标签。\caption
\subfigimg
如果不需要标签,\subfigimg
则将最后一个参数留空。
我添加了使用两个附加参数更改标签位置的可能性。它们将插入到两个强制参数之间。第一个参数插入<horizontal>
(<>
作为分隔符)并更改水平偏移,第二个参数[vertical]
更改垂直偏移。
\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-c}{fig:s11}
&
\subfigimg[width=\linewidth]{example-image-b}{fig:s12}
\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}
\begin{figure}
\centering
\caption{bla bla bla}
\label{fig:2}
\begin{tabular}{p{0.5\linewidth}@{}p{0.5\linewidth}}
\subfigimg*[width=\linewidth]{example-image-c}<20pt>[4\baselineskip]{fig:s21}
&
\subfigimg*[width=\linewidth]{example-image-b}{fig:s22}
\end{tabular}
\end{figure}
See subfigures \ref{fig:s21} and \ref{fig:s22} of figure~\ref{fig:2}
\end{document}
请注意,subfigs
仅当数字计数器增加或您使用类似方法手动重置计数器时,计数器才会重置\setcounter{subfigs}{0}
。
答案2
这是一个使用广泛使用的包的解决方案,它提供了名为和 的subcaption
LaTeX 环境。该包还提供了许多用于配置所有字幕格式的选项。subfigure
subtable
\documentclass{revtex4-1}
\usepackage{graphicx,subcaption}
\makeatletter
\renewcommand{\p@subfigure}{\thefigure.} % note the '.'
\makeatletter
\begin{document}
\begin{figure}
\begin{subfigure}{0.475\textwidth}
\includegraphics[width=\linewidth]{example-image-a}
\caption{First subfigure}\label{fig:small_a}
\end{subfigure}\hfill
\begin{subfigure}{0.475\textwidth}
\includegraphics[width=\linewidth]{example-image-b}
\caption{Second subfigure}\label{fig:small_b}
\end{subfigure}
\caption{bla bla bla} \label{fig:big}
\end{figure}
\noindent
Some cross-references to Figure \ref{fig:big} and to Subfigures \ref{fig:small_a} and \ref{fig:small_b}.
\end{document}