我想将子图标签(a)、(b)等放在子图的左上角,如下图所示:
我知道有一些解决方法,例如这个帖子(与stackengine
)或这个帖子(带)。但是,除非真的没有办法,否则subcaption
我不想使用,而 REVTeX4 排除了该选项。因此,我想知道是否存在专门针对包的解决方法(并且可能与 REVTeX4 兼容)。stackengine
subcaption
subfig
以下 MWE 尝试实现预期效果,但未能成功:
\documentclass{revtex4-1}
\usepackage{graphicx}
\usepackage{subfig}
\captionsetup[subfloat]{farskip=-10pt, position=top}
\begin{document}
\begin{figure}
\centering
\subfloat[][]{
\includegraphics[width=0.45\linewidth]{example-image-a}}
\subfloat[][]{
\includegraphics[width=0.45\linewidth]{example-image-b}}\\
\subfloat[][]{
\includegraphics[width=0.45\linewidth]{example-image-c}}
\subfloat[][]{
\includegraphics[width=0.45\linewidth]{example-image-a}}
\caption{abcd}
\end{figure}
\end{document}
答案1
我建议编写自己的宏来放置子图编号:
\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}
\centering
\begin{tabular}{@{}p{0.45\linewidth}@{\quad}p{0.45\linewidth}@{}}
\subfigimg[width=\linewidth]{A)}{example-image-a} &
\subfigimg[width=\linewidth]{B)}{example-image-b} \\
\subfigimg[width=\linewidth]{C)}{example-image-c} &
\subfigimg[width=\linewidth]{D)}{example-image-a}
\end{tabular}
\caption{A caption}
\end{figure}
\end{document}
一旦获得了图像,您就可以将其打印在盒子中并提取其尺寸,以便使用它们来定位标签。
上面的宏\subfigimg[<options>]{<label>}{<image>}
就是这么做的。它使用<image>
选项插入<options>
并打印<label>
从图像左侧开始的 10pt 和从图像顶部开始的 2 个基线跳跃。
没有包裹,也没有胡闹。只是箱子操作。
通过字符串比较来定位一些额外的功能......
pdfTeX 引入\pdfstrcmp
字符串比较版本 1.30:
\pdfstrcmp{<a>}{<b>}
比较两个字符串,如果等于则返回字符串“0” ,如果小于则返回字符串<b>
“-1” ,如果大于则返回字符串“1” 。<a>
<b>
<a>
<b>
\documentclass{revtex4-1}% http://ctan.org/pkg/ltxutil
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{xkeyval,xcolor}% http://ctan.org/pkg/{xkeyval,xcolor}
\makeatletter
\newlength{\sfp@hseplen}\newlength{\sfp@vseplen}
\define@cmdkey{subfigpos}[sfp@]{pos}[ul]{}% \sfp@pos
\define@cmdkey{subfigpos}[sfp@]{font}[\small]{}% \sfp@font
\define@cmdkey{subfigpos}[sfp@]{vsep}[2\baselineskip]{\setlength{\sfp@vseplen}{\sfp@vsep}}% \sfp@vsep
\define@cmdkey{subfigpos}[sfp@]{hsep}[10pt]{\setlength{\sfp@hseplen}{\sfp@hsep}}% \sfp@hsep
\newcommand{\subfigimg}[3][,]{%
\setkeys{Gin,subfigpos}{pos,font,vsep,hsep,#1}% Set (default) keys
\setbox1=\hbox{\includegraphics{#3}}% Store image in box
\ifnum\pdfstrcmp{\sfp@pos}{ul}=0% UPPER LEFT placement of subfig label
\leavevmode\rlap{\usebox1}% Print image
\rlap{\hspace*{\sfp@hsep}\raisebox{\dimexpr\ht1-\sfp@vsep}{\sfp@font{#2}}}% Print label
\phantom{\usebox1}% Insert appropriate spacing
\else\ifnum\pdfstrcmp{\sfp@pos}{ur}=0% UPPER RIGHT placement of subfig label
\leavevmode\usebox1% Print image
\llap{\raisebox{\dimexpr\ht1-\sfp@vsep}{\sfp@font{#2}}\hspace*{\sfp@hsep}}% Print label
\else\ifnum\pdfstrcmp{\sfp@pos}{lr}=0% LOWER RIGHT placement of subfig label
\leavevmode\usebox1% Print image
\llap{\raisebox{\sfp@vsep}{\sfp@font{#2}}\hspace*{\sfp@hsep}}% Print label
\else% Assume LOWER LEFT placement of subfig label
\leavevmode\rlap{\usebox1}% Print image
\rlap{\hspace*{\sfp@hseplen}\raisebox{\sfp@vsep}{\sfp@font{#2}}}% Print label
\phantom{\usebox1}% Insert appropriate spacing
\fi\fi\fi
}
\makeatother
\begin{document}
\begin{figure}
\centering
\begin{tabular}{@{}p{0.45\linewidth}@{\quad}p{0.45\linewidth}@{}}
\subfigimg[width=\linewidth,pos=lr]{A)}{example-image-a} &
\subfigimg[width=\linewidth,pos=ll,font=\color{green!30!red}]{B)}{example-image-b} \\
\subfigimg[width=\linewidth,pos=ur,font=\LARGE]{C)}{example-image-c} &
\subfigimg[width=\linewidth,pos=ul]{D)}{example-image-a}
\end{tabular}
\caption{A caption}
\end{figure}
\end{document}
上述 MWE 将、 和pos
键font
添加到组合中。反过来,它们允许选择要使用的标签的设置、水平和垂直设置。hsep
vsep
pos
font
h
sep
v
sep
答案2
stackengine
作为解决方案的作者和提供者图内有数字的子图,我应该有点不愿意削弱自己,并提供替代解决方案。但这就是它(我们都参与其中)。远没有那么优雅,相当蛮力,但它避免使用包。
经过编辑,删除了解决方案的残留部分。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
xxx
\includegraphics[width=5in]{vjbrp}\llap{
\parbox[b]{4.5in}{(A)\\\rule{0ex}{2.2in}
}}
yyy
\end{document}
答案3
我想填充标签(a)、(b)的背景,并且我想将图像插入 tikzpicture 环境中,如下所示:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{subcaption}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{subfigure}[htbp]{0.48\textwidth}
\begin{tikzpicture}
\node[inner sep=0pt] (duck) at (0,0)
{\includegraphics[width=\textwidth]{duck}};
\node[align=center,fill=white,draw] at (-2.4,2.1) {(a)};
\end{tikzpicture}
\end{subfigure}
~
\begin{subfigure}[htbp]{0.48\textwidth}
\begin{tikzpicture}
\node[inner sep=0pt] (duck2) at (0,0)
{\includegraphics[width=\textwidth]{duck}};
\node[align=center,fill=white,draw] at (-2.4,2.1) {(b)};
\end{tikzpicture}
\end{subfigure}
\caption{text}
\label{duck}
\end{figure}
\end{document}
鸭子的图片: https://www.thoughtco.com/fun-facts-about-ducks-4043231