LaTeX 代码

LaTeX 代码

最近,我学会了如何使用 TikZ 绘制一些简单的东西。我真的很喜欢它。现在我想知道是否可以用 TikZ 在图像上绘图。我不想在 Illustrator 中粘贴图像并添加一些矢量来指向图片中的某个东西,而是想使用 TikZ 来做到这一点。可以吗?

例如,在一张计算机图片(PNG 等)上,我想画一些箭头和标签,写着“键盘”、“显示器”等等。

答案1

(本答案的第一部分摘自我的回答回答一个类似但不完全相同的问题。)

您可以将一个放在\includegraphicsTikZ 节点内,然后在其上绘制。以下代码添加图片,使左下角位于 TikZ 坐标系的原点。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\textwidth]{some_image.jpg}};
    \draw[red,ultra thick,rounded corners] (7.5,5.3) rectangle (9.4,6.2);
\end{tikzpicture}
\end{document}

照片来自 Wikipedia some_image.jpg,结果如下

例子

此解决方案存在一个小问题:每当您选择以不同方式缩放图像时(例如使用width=0.9\textwidth),您都必须更正注释的坐标。因此,引入相对于图片的坐标可能会很有用:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[width=0.9\textwidth]{some_image.jpg}};
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
        \draw[red,ultra thick,rounded corners] (0.62,0.65) rectangle (0.78,0.75);
    \end{scope}
\end{tikzpicture}
\end{document}

然后在里面scope,(0,0)位于图片的左下方,(1,1)位于右上角,缩放图片会自动缩放注释(或者更正确地说,它会缩放它们的位置;线宽和文本大小保持不变)。

小警告:如果你想在新的坐标系中画圆,你必须使用绝对长度的半径(例如[radius=1cm])。否则圆将变成椭圆(如果图像不是正方形)。

答案2

这是为了对 Caramdir 的答案进行补充,但我不知道如何在注释中插入换行符:

为了更容易在新的坐标系中找到所需的点,您可以在处理图像时在图像顶部绘制一个标记的网格:

\draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
\foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {0.\x}; }
\foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {0.\y}; }

带有网格的图像

完整示例:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[width=0.9\textwidth]{some_image.jpg}};
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
        \draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
        \foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {0.\x}; }
        \foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {0.\y}; }
    \end{scope}
\end{tikzpicture}
\end{document}

答案3

对于 PSTricks 粉丝来说,解决方案也很简单。与 Caramdir 和 Jake 使用十进制数进行规范化的解决方案不同,我使用整数。我相信使用整数更好。:-)

具体步骤如下:

  1. 指定列数和行数。值越高,您越容易确定更准确的位置。除非您愿意重做第三步,否则在完成第三步后请避免更改这些值。
  2. 指定比例。缩放不会影响您在第三步中所做的操作。
  3. 叠加在这里完成。要启用网格,请showgrid从更改falsetop。网格将有助于确定位置。
\documentclass[pstricks,border=12pt]{standalone}

\def\M{4}% columns
\def\N{4}% rows
\def\scale{0.25}% scale
\def\filename{mycena_interrupta}% filename


\usepackage{graphicx}
\newsavebox\IBox
\savebox\IBox{\includegraphics[scale=\scale]{\filename}}

\addtopsstyle{gridstyle}
{
    gridcolor=yellow,
    subgridcolor=gray,
    subgriddiv=10,
    griddots=0,
    subgriddots=5,
    gridwidth=0.4pt,
    subgridwidth=0.2pt,
}

\psset
{
   xunit=0.5\dimexpr\wd\IBox/\M,
   yunit=0.5\dimexpr\ht\IBox/\N,
}

\begin{document}
\begin{pspicture}[showgrid=top](-\M,-\N)(\M,\N)
    \rput(0,0){\usebox\IBox}
    \psframe[linecolor=red,linewidth=2pt,dimen=inner,framearc=0.5](0.9,1.2)(2.2,2)
\end{pspicture}
\end{document}

什么时候showgrid=top

在此处输入图片描述

最终结果如下showgrid=false

在此处输入图片描述

答案4

轻易地获得精确的相对位置(这通常非常繁琐)并自动生成如下所示的示例的 LaTeX 代码,您可以使用新的基于 Web 的LaTeX 覆盖生成器,这是我为这种情况构建的。这只是一个小型交互式工具,它可以帮助您找到正确的位置,而无需使用基于网格的手动方法。

例子

LaTeX 代码

以下是由LaTeX 覆盖生成器

\documentclass{article}

% remove "[demo]" if you want include actual image!!!
\usepackage[demo]{graphicx}

\usepackage{tikz}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LaTeX Overlay Generator - Annotated Figures v0.0.1
% Created with http://ff.cx/latex-overlay-generator/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\annotatedFigureBoxCustom{bottom-left}{top-right}{label}{label-position}{box-color}{label-color}{border-color}{text-color}
\newcommand*\annotatedFigureBoxCustom[8]{\draw[#5,thick,rounded corners] (#1) rectangle (#2);\node at (#4) [fill=#6,thick,shape=circle,draw=#7,inner sep=2pt,font=\sffamily,text=#8] {\textbf{#3}};}
%\annotatedFigureBox{bottom-left}{top-right}{label}{label-position}
\newcommand*\annotatedFigureBox[4]{\annotatedFigureBoxCustom{#1}{#2}{#3}{#4}{white}{white}{black}{black}}
\newcommand*\annotatedFigureText[4]{\node[draw=none, anchor=south west, text=#2, inner sep=0, text width=#3\linewidth,font=\sffamily] at (#1){#4};}
\newenvironment {annotatedFigure}[1]{\centering\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) { #1};\begin{scope}[x={(image.south east)},y={(image.north west)}]}{\end{scope}\end{tikzpicture}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

    \begin{figure}[h!t]

        \begin{annotatedFigure}
            {\includegraphics[width=1.0\linewidth]{black-demo.png}}
            \annotatedFigureBox{0.084,0.614}{0.394,0.804}{A}{0.084,0.614}%bl
            \annotatedFigureBox{0.222,0.284}{0.3743,0.4934}{B}{0.3743,0.4934}%tr
            \annotatedFigureBox{0.555,0.784}{0.6815,0.874}{C}{0.555,0.784}%bl
            \annotatedFigureBox{0.557,0.322}{0.8985,0.5269}{D}{0.8985,0.5269}%tr
        \end{annotatedFigure}

        \caption{\textbf{Lorum Ipsum Overview} -- Lorem ipsum dolor amet (A), consetetur (B) elitr, sed diam (C) nonumy eirmod invidunt ut labore (D).}
        \label{fig:teaser}

    \end{figure}

\end{document}

相关内容