附有说明图片的地图

附有说明图片的地图

我尝试实现这样的目标: 附有说明图片的地图

这是我在当地动物园拍的照片。抱歉画质不佳。

我喜欢地图包含解释图像的想法,并尝试使用 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}

结果如下:

在此处输入图片描述

如您所见,节点和描述图像左侧之间有间隙。我想知道为什么会有这些间隙,我该如何让它们消失?

编辑:阅读杰克的评论后问题解决了。

相关内容