我尝试实现这样的目标:
这是我在当地动物园拍的照片。抱歉画质不佳。
我喜欢地图包含解释图像的想法,并尝试使用 beamer 实现同样的效果。不幸的是,我的输出结果很差。我的第一次尝试有以下代码:
\PassOptionsToPackage{demo}{graphicx}
\documentclass[a4paper]{beamer}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\node[] (image) at (current page.center) {\includegraphics[width=0.6\textwidth]{map.jpg}};
\begin{scope}[x={(image.south east)},y={(image.north west)}]
\node[] (descriptionimage) at (1.1, 0.25) {\framebox{\includegraphics[width=0.15\textwidth]{bird.jpg}}};
\node[] (markhere) at (0.7, 0.25) {};
\draw [thin, red, fill=red] (markhere) circle (4pt);
\path[->,red] (descriptionimage) edge [out=90, in=0] (markhere);
\end{scope}
\end{tikzpicture}
\end{document}
由于我不经常使用 tikz,所以我不知道如何在 markhere 节点(可能是虚线)之间绘制优雅的线条以及如何获取解释图像下方的小描述文本。
有人能帮我找到一个更优雅的解决方案,也许找到一个更优雅的代码吗?
答案1
我曾经在一篇论文中使用过spy
库来tikz
放大照片。也许你可以用下面的代码来做一些事情。
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{spy}
\usepackage[pdftex,active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\newcommand{\imsize}{\linewidth}
\newlength\imagewidth
\newlength\imagescale
\begin{document}
\pgfmathsetlength{\imagewidth}{\imsize}
\pgfmathsetlength{\imagescale}{\imagewidth/5700}
\begin{figure}
\centering
\def\magnification{3}
\begin{tikzpicture}[x=\imagescale,
y=-\imagescale,
spy using outlines={rectangle, magnification=\magnification,size=100}]
\node[anchor=north west,inner sep=0pt,outer sep=0pt] at (0,0) {\includegraphics[width=\imagewidth]{World_map_blank_gmt}};
\spy [red,connect spies] on (1490,988) in node at (0,2000);
\node at (0,3000) {Florida};
\spy [red,connect spies] on (3392,1812) in node at (5700,500);
\node at (5700,1500) {Madagascar};
\end{tikzpicture}
\end{figure}
\end{document}
答案2
你可以相对轻松地编写自己的函数来实现不同程度的自动化。下面是一个基于覆盖文本+矩形标签图像的最简单方法?:
\begin{tikzonimage}{bottle.jpg}
\nicelabel{0.5,0.92}{Lid}
\nicelabel[nice label position=below right]{0.7,0.56}{Pearls}
\nicelabel[nice label position=above left]{0.3,0.1}{Corner}
\end{tikzonimage}
完整代码:
\documentclass{article}
\usepackage{onimage}
\tikzset{nice label position/.is choice,
nice label position/above right/.code={
\def\xpos{1.2}
\def\startangle{45}
\tikzset{nice label/.style={anchor=west, yshift=4ex}}
},
nice label position/below right/.code={
\def\xpos{1.2}
\def\startangle{-45}
\tikzset{nice label/.style={anchor=west, yshift=-4ex}}
},
nice label position/above left/.code={
\def\xpos{-0.2}
\def\startangle{135}
\tikzset{nice label/.style={anchor=east, yshift=4ex}}
},
nice label position/below left/.code={
\def\xpos{-0.2}
\def\startangle{225}
\tikzset{nice label/.style={anchor=east, yshift=-4ex}}
}
}
\newcommand{\nicelabel}[3][]{
\tikzset{nice label position=above right,#1}
\node (highlight) at (#2) [circle, draw, orange, ultra thick, minimum width=0.75cm] {};
\node (label) at (#2-|{\xpos,0}) [nice label] {#3};
\draw [orange, thick] (highlight) -- ++(\startangle:1.414*4ex) -- (label);
}
\begin{document}
\begin{tikzonimage}{bottle.jpg}
\nicelabel{0.5,0.92}{Lid}
\nicelabel[nice label position=below right]{0.7,0.56}{Pearls}
\nicelabel[nice label position=above left]{0.3,0.1}{Corner}
\end{tikzonimage}
\end{document}
答案3
我采纳了评论中的建议,使用 inkscape + latex 导出来渲染文本。严格来说,这不是对你问题的回答,但可能会解决潜在的问题。花了两分钟创建。
\documentclass{article}
\usepackage{graphicx,xcolor}
\begin{document}
\input{murica.pdf_tex}
\end{document}
答案4
我现在得到了一些不错的答案,但我尝试自己解决。这是代码:
\PassOptionsToPackage{demo}{graphicx}
\documentclass[a4paper]{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
%Hauptbild einfügen
\node (image) at (current page.center) {\includegraphics[width=0.8\textwidth]{map}};
\begin{scope}
%Markierungskoordinaten
\node[xshift=-.11cm, yshift=1.3cm] (markhere) at (image.center) {};
%Markierung zeichnen (Kreis)
\draw [very thick, red, minimum width=.5cm] (markhere) circle (4pt);
%Nebenbild einfügen
\node [xshift=4.5cm, yshift=-.5cm, inner sep=o](descriptionimage) at (image.center) {\framebox{\includegraphics[width=1.5cm]{gimpel}}};
%Pfad zeichnen
\coordinate [left=2cm of descriptionimage](between node);
\draw[red, very thick, dotted] (markhere.east) -| (between node) -+ (descriptionimage.west);
\end{scope}
\end{tikzpicture}
\end{document}
结果如下:
如您所见,节点和描述图像左侧之间有间隙。我想知道为什么会有这些间隙,我该如何让它们消失?
编辑:阅读杰克的评论后问题解决了。