用 LaTeX 做幻燈片時(beamer),如何在插入的圖片上畫圖?

比如在一張插入的圖片上加個箭頭,目前看到的畫圖功能似乎都需要一個畫圖區域,無法和插入的圖片重疊。


@劉海洋 前輩的答案是對的。實際上需要做的就是在 TikZ 之類的繪圖工具繪圖的之前,用 includegraphics 命令插入圖片。這樣繪圖工具繪製的圖形就會「浮」在插圖的上方。

我覺得有必要補充一個非常實用的小技巧,因為這其實涉及到一個非常常見的需求。比如:已有的圖片上,圖例的字體和正文字體不同,直接插入顯得相當不協調。又比如題主想要在圖片上加上一些箭頭。這些對圖片進行「解釋性」的修改在寫文章的時候其實經常會遇到。

以下內容翻譯整理自 TeX.SX 上的一系列問答(graphics - Drawing on an image with TikZ)。

我們先來看一張圖片(來自 Wikipedia http://upload.wikimedia.org/wikipedia/commons/1/16/Mycena_interrupta.jpg),我們的任務是標記出圖片右上方明顯「突出來」的那一隻蘑菇(?)。

首先 Caramdir 在
ode 里插了一副圖片,然後把 anchor 定在圖片的左下角,然後用 TikZ 在圖片上畫一個框。

egin{tikzpicture}

ode[anchor=south west,inner sep=0] at (0,0) {includegraphics[w= extwidth]{some_image.jpg}};
draw[red,ultra thick,rounded corners] (7.5,5.3) rectangle (9.4,6.2);
end{tikzpicture}

這樣得到結果:

注意 anchor 設置在圖片左下角(south west)的好處。

任務雖然完成了,但是明顯的問題在於:(7.5, 5.3) 和 (9.4, 6.2) 這兩個坐標怎麼確定——總不能一點點試吧。

對於矩形的圖片,在圖片上確定位置最方便的方法自然是建立直角坐標系。Jake 在圖片上建立了一個直角坐標系,並且用 grid 在圖片上畫了一個網格。這樣確定位置就容易多了,而且,即使圖片進行拉伸、旋轉等各種變化,都能很容易地確定出坐標。

egin{tikzpicture}
% 引入圖片

ode[anchor=south west,inner sep=0] (image) at (0,0) {includegraphics[w=0.9 extwidth]{Mycena_interrupta.jpg}};

egin{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} {
ode [anchor=north] at (x/10,0) {0.x}; }
foreach y in {0,1,...,9} {
ode [anchor=east] at (0,y/10) {0.y}; }
% 作圖命令
draw[red, ultra thick, rounded corners] (0.62,0.65) rectangle (0.78,0.75);
end{scope}
end{tikzpicture}

著重提一下:

  • ode 命令之後用圓括弧括起來的東西,是這個 node 的名字。有了名字之後,就可以在後續的代碼里引用這個 node。
  • scope 環境建立了一個直角坐標系。圖片的右下角(south east)是 x 取值為 1 的點,圖片的左上角是 y 取值為 1 的點。
  • 接下來的 draw 命令,用 grid 畫了一個網格,其中疏密可以用 xstep 和 ystep 來控制。
  • 緊接著的兩條 foreach 是給圖片標上坐標值。

這樣編譯之後,所需要的坐標就一目了然了,在最後加上作圖命令即可。


任浩和孫曉博兩個人的回答似乎都有點扯遠了,挺驚訝從裡面甚至沒有看到「插圖」的存在。我認為你並不真的需要把任意兩個對象連起來,只是在插圖上做點標記而已。

在插圖上畫圖,你需要做的其實不過是:

在畫圖時插圖。

就像這樣(我假裝你會 tikz,不然也別畫什麼圖了):

documentclass{beamer}
usepackage{tikz}

egin{document}

egin{frame}

egin{tikzpicture}[nodes={inner sep=0}]
% 插圖

ode (a)
{includegraphics[w=3cm]{example-image-a}};

ode (b) at (5,0)
{includegraphics[w=3cm]{example-image-b}};
% 畫圖
draw[-&>,red,line w=2mm] (a) -- (b);
draw[&<-,blue,line w=2mm] (a) -- ++ (-1,-3); draw[green,line w=1mm] (b.center) circle (1.5cm); end{tikzpicture} end{frame} end{document}


beamer + PSTricks 可以實現下面這樣的效果:

來自於 http://www.icms.org.uk/downloads/pgcourses/Griffiths.pdf


推薦閱讀:

用 LaTeX 中使用 beamer 製作幻燈片,插入圖片的標題大小怎麼改變?
倒著的Ω是什麼符號?
LaTeX 如何在設置行距後讓字體垂直居中?
LaTeX 公式中的逗號可以改成全形么?
LaTeX把一個字元放在另一個上面, 但是字元寬度按照下面的字元來的效果怎麼做出來?

TAG:LaTeX | LaTeX排版與設計 | beamer |