我的 LaTeX 文档中有两个 PDF 图形(图表)。由于其中一个非常简单,并且我的文档空间有限,所以我想将其放在第二个图表的右上角。
我可以使用一些图像编辑工具来做到这一点。但我可以直接在 LaTeX 中做到这一点吗(避免创建单个合并 PDF)?
答案1
\llap
通过利用和TeX 命令,可以相对轻松地在彼此之间排版材料,无需任何额外的软件包\rlap
。这些命令基本上将一些材料从当前位置分别排版到左侧和右侧,而不管什么,也不会改变当前位置。
由于包含的图形\includegraphics
在底部对齐,因此还可以使用\raisebox
在 y 方向上提升第二个图形:
\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\begin{document}
\lipsum[3]
\begin{figure}
\centering
\includegraphics[height=6cm]{example-image-a}%
\llap{\raisebox{3cm}{% move next graphics to top right corner
\includegraphics[height=3cm]{example-image-b}%
}}
\caption{My overlay figure.}
\end{figure}
\lipsum[3]
\end{document}
如果不想将第一个图形缩放到特定高度,而是缩放到类似 的高度\columnwidth
,也可以测量最终高度。有很多方法可以做到这一点(基本上都是:“装箱”+“测量”)下面,我仅使用包提供的功能calc
:
\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{calc} % for height measuring
\begin{document}
\lipsum[3]
\begin{figure}
\centering
% first measure it's height (store in \dimen0), then actually include the graphics
\settototalheight{\dimen0}{\includegraphics[width=\columnwidth]{example-image-a}}%
\includegraphics[width=\columnwidth]{example-image-a}%
\llap{\raisebox{\dimen0-3cm}{% move next graphics to top right corner
\includegraphics[height=3cm]{example-image-b}%
}}
\caption{My overlay figure.}
\end{figure}
\lipsum[3]
\end{document}
答案2
这是一个通用的解决方案。只需进行简单的编辑,您就可以得到想要的东西。请使用 或 对其进行xelatex
TeXing latex-dvips-ps2pdf
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{pstricks}
\newbox\IBox
\savebox\IBox{\includegraphics[scale=0.8]{god}}
\def\Rows{5}
\def\Columns{5}
\psset
{
xunit=\dimexpr\wd\IBox/\Columns\relax,
yunit=\dimexpr\ht\IBox/\Rows\relax,
}
\usepackage{lipsum}
\begin{document}
\lipsum[1-3]
\begin{figure}
\begin{pspicture}[showgrid=top](\dimexpr\wd\IBox+3\psxunit\relax,\ht\IBox)
\rput[bl](0,0){\usebox\IBox}
\rput[tr](8,5){\includegraphics[scale=0.5]{example-image-b}}
\end{pspicture}
\caption{The Gods must be crazy.}%
\label{fig:}%
\end{figure}
\lipsum[4-7]
\end{document}
图片取自上帝一定是疯了。
希望这是最后一次编辑。
\documentclass{article}
\usepackage{graphicx}
\usepackage{pstricks}
\newbox\IBox
\savebox\IBox{\includegraphics[scale=1]{example-image-a}}
\def\Rows{5}
\def\Columns{5}
\psset
{
xunit=\dimexpr\wd\IBox/\Columns\relax,
yunit=\dimexpr\ht\IBox/\Rows\relax,
}
\usepackage{lipsum}
\begin{document}
\lipsum[1-3]
\begin{figure}
\begin{pspicture}[showgrid=top](\wd\IBox,\ht\IBox)
\rput[bl](0,0){\usebox\IBox}
\rput[tr](\wd\IBox,\ht\IBox){\includegraphics[scale=0.5]{example-image-b}}
\end{pspicture}
\caption{Is the answer of this question ``No''?}%
\label{fig:}%
\end{figure}
\lipsum[4-7]
\end{document}
答案3
Daniel 的回答很棒,但我错过了水平和垂直移动较小图像(在我的情况下是情节图例)的功能。我还希望根据较大图像来定义较小图像的大小和坐标。因此,经过一些调整后,我想出了以下宏:
\newlength{\imagew}
\newlength{\imageh}
\newlength{\legendw}
\newlength{\legendh}
\newlength{\legendx}
\newlength{\legendy}
\newcommand{\graphicswithlegend}[6]{
\setlength{\imagew}{#1}
\settoheight{\imageh}{\includegraphics[width=\imagew]{#2}}
\setlength{\legendw}{#3\imagew}
\settoheight{\legendh}{\includegraphics[width=\legendw]{#4}}
\setlength{\legendx}{\imagew}
\addtolength{\legendx}{-\legendw}
\addtolength{\legendx}{-#5\imagew}
\setlength{\legendy}{\imageh}
\addtolength{\legendy}{-\legendh}
\addtolength{\legendy}{-#6\imageh}
\includegraphics[width=\imagew]{#2}%
\llap{
\hspace{-\the\legendx}
\raisebox{\legendy}{\includegraphics[width=\legendw]{#4}}
\hspace{\the\legendx}
}
}
上面的宏有六个参数:
- 较大图像的宽度和路径;
- 较小图像的宽度和路径;
- 较小图像相对于较大图像左上角的水平和垂直位移。
请参阅下面的示例。
\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\newlength{\imagew}
\newlength{\imageh}
\newlength{\legendw}
\newlength{\legendh}
\newlength{\legendx}
\newlength{\legendy}
\newcommand{\graphicswithlegend}[6]{
\setlength{\imagew}{#1}
\settoheight{\imageh}{\includegraphics[width=\imagew]{#2}}
\setlength{\legendw}{#3\imagew}
\settoheight{\legendh}{\includegraphics[width=\legendw]{#4}}
\setlength{\legendx}{\imagew}
\addtolength{\legendx}{-\legendw}
\addtolength{\legendx}{-#5\imagew}
\setlength{\legendy}{\imageh}
\addtolength{\legendy}{-\legendh}
\addtolength{\legendy}{-#6\imageh}
\includegraphics[width=\imagew]{#2}%
\llap{
\hspace{-\the\legendx}
\raisebox{\legendy}{\includegraphics[width=\legendw]{#4}}
\hspace{\the\legendx}
}
}
\begin{document}
\lipsum[3]
\begin{figure}
\centering
\graphicswithlegend{\columnwidth}{example-image-a}
{0.5}{example-image-b}{0.52}{0.0}
\caption{My overlay figure.}
\end{figure}
\lipsum[3]
\end{document}