LaTeX中插入图片
在科研论文中,图片是一个非常重要的组成部分。LaTeX
提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片、旋转图片,以及如何在文档中引用这些图片。实现插入图片的功能需要在导言引用graphics
或graphicx
,
下面就一些重要的点展开讨论。
图片的路径
当你的文档拥有很多个图片的时候,创建多个文件夹来存储图片是一个规划项目的好办法。
命令\graphicspath{ {images/} }
告诉 LaTeX
在_images_文件夹中寻找图片。这个路径是当前工作文件夹的相对路径,所以,编译器会在当前文档所在的目录中开始寻找文件。文件夹的路径默认情况下是相对路径,如果没有一个初始的目录被指定,例如:
1 | %Path relative to the .tex file containing the \includegraphics command |
这是一个非常直接的方法来指定图片所存储的路径,不过有时候会使情况变得复杂,从而导致编译器找不到图片所在的目录。所以,你最好手动指定一个对于主 .tex 文件来说相对的图片路径,将主 .tex 文件夹表示为 ./,例如:
1 | %Path relative to the main .tex file |
路径也可以是绝对路径。例如,如果你在一个本地 LaTeX 环境中进行工作,你可以:
1 | %Path in Windows format: |
需要注意的是,目录的结尾也需要一个斜杠,并且路径是被包含在双大括号之间。
你还可以设置多个路径,如果文档的图片被存储在多个文件夹中。例如,如果有两个文件夹_images1_和_images2_,使用下面的命令:
1 | \graphicspath{ {./images1/}{./images2/} } |
改变图片的大小、旋转图片
如果我们想额外地编辑图片的属性(长、宽等),我们可以使用下面的设定:
1 | \begin{document} |
命令\includegraphics[scale=1.5]{lion-logo}
会把图片
lion-logo
插入到文档中,额外的参数scale=1.5
会把图片的大小变为原本的1.5倍。你也可以指定图片的长宽:
1 | \begin{document} |
如聪明的你所想的,方括号里的参数[width=3cm, height=4cm]
定义了图片的宽度和高度。你还可以使用不同的单位来定义这些参数。如果只有宽度_width_被指定了,那么高度会被自动调整到图片原始的比例。
长度单位也可以被设置为文档中某些属性的相对值。例如,你可以将图片的宽度设置为文档中一行文本所占的宽度:
1 | \begin{document} |
除了\textwidth
,你还可以使用其他的 LaTeX
默认长度,例如\columnsep
、linewidth
、\textheight
、\paperheight
等。更多有关单位的信息请见这篇文章。
LaTeX 中还有一种常见的改变图片的方法,即旋转图片:
1 | \begin{document} |
参数angle=45
会将图片逆时针旋转45度。顺时针旋转的话你可以使用负数。
图片的位置
在上一个章节中,我们介绍了如何在文档中插入图片,但是文字和图片的结合可能并不是我们想要的样子。所以我们接下来介绍一种新的环境。
1 | In the next example the figure will be positioned |
figure
环境的作用是在文档中将图片展示为浮动元素。这意味着你可以把图片放置在figure
环境之中,不需要再去关注图片的位置,LaTeX
会自动把图片放置在文档中的合适位置。
当然,有些时候我们需要更细致地控制图片的位置。我们可以使用一种额外的参数来控制图片的位置。在这个例子中,begin{figure}[h]
,方括号中的参数h
意味着
here。下面的表格中列出了参数的可选值。
参数 | 位置 |
---|---|
h | 将浮动元素的位置设定为 here(这里),也就是说,大约_位于其在文档中出现位置(是_大约,而不是完全精确) |
t | 将浮动元素的位置设定为页面的上方(top) |
b | 将浮动元素的位置设定为页面的底部(bottom) |
p | 将浮动元素仅放置在一个特殊的页面 |
! | 重新设置LaTeX的一个内部参数,这个参数决定了LaTeX如何判断一个浮动元素的位置够不够“好” |
H | 将浮动元素精确地放置在它在文本中所出现的位置。这个参数需要引入float 包,它有可能会造成一些错误。这个参数有时候等价于h! |
在下面的例子中,你可以看到,尽管图片定义在文字之后,但是图片依旧出现在了页面的顶部。
1 | In this picture you can see a bar graph that shows |
命令\centering
会将图片居中显示。默认的对齐选项是向左对齐。
图题、标签、引用
给图片添加标题和标签是两个非常重要的工具。
图题
让我们从一个例子开始。
1 | \begin{figure}[h] |
非常简单,对吧?只需要添加\caption{Some caption}
命令,在大括号内输入你要添加的文字就可以了。命令的位置决定着图题会出现在图片的上方或者下方。
图题也可以放置在图片的侧方。引入sidecap
包即可。
1 | \usepackage[rightcaption]{sidecap} |
它有两个新的命令。
\usepackage[rightcaption]{sidecap}
如你所想,这个命令会引入sidecap
包,并且方括号中的参数会将文档中的图片的图题设置在图片的右方。你也可以使用leftcaption
参数。对于book
类型的文档,你还可以使用outercaption
或者innercaption
。
\begin{SCfigure}[0.5][h] \end{SCfigure}
这个命令定义了一个类似于figure
的环境。第一个参数定义了图题相对于图片的宽度。第二个参数h
与figure
环境中的h
作用相同。
LaTeX中还有更多的命令来对图片进行定制化,你可以在本文的末尾找到更多信息。
标签和交叉引用
与LaTeX文档中的许多其他元素相同(例如公式、表格等),图片也可以在文本中被引用。你只需要简单地对其添加一个标签就可以了,然后使用这个标签来在文本中引用这个图片。
1 | \begin{figure}[h] |
下面我们介绍三种生成交叉引用的命令。
\label{fig:mesh1}
这个命令设置了图片的标签。对标签添加一个前缀是一个很好的习惯,例如对图片添加fig
,对表格添加tab
等。\ref{fig:mesh1}
这个命令在文本中添加一个数字,数字对应着这个图片。这个数字会自动生成,并且当你插入其他图片的时候,它会自动更新。\pageref{fig:mesh1}
这个命令会输出图片所在的页数。
如果你想要引用一个图片,那么\caption
命令是强制的。
LaTeX 另外一个强大的功能是,你可以自动生成文档中图片的列表:
1 | \listoffigures |
这个命令仅对有标签的图片有效。重要提示:你必须编译LaTeX文档两次来使交叉引用等功能正常显示。
生成高分辨率的和低分辨率的图片
我们在\includegraphics
命令中输入图片的文件名的时候,我们忽略了图片文件的后缀。事实上,添加后缀并不是强制的,尽管很多时候添加后缀是很有用的。如果文件名的后缀没有被输入,那么LaTeX会在当前文件夹中自动搜索所有支持的文件格式,并且会用默认的顺序来搜索各种后缀(这个顺序可以自定义)。
如果你需要经常在开发模式和生产模式之间切换,那么这个功能会很有用。在开发模式中(当文档还没有完成的时候),你可能想去使用低分辨率的图片(一般来说是png格式的)来加速编译。在生产模式中(生成文档的最终版本),你可能想要使用高分辨率的图片。
你可以这样做:
- 不要在
\includegraphics
命令中输入文件名的后缀 - 在文档的序言中设定你想要的后缀
这样,我们可以在图片的两种格式之间灵活切换,例如venndiagram.pdf
(高分辨率)和venndiagram.png
(低分辨率)。然后我们可以在序言中使用下面的命令:
1 | \DeclareGraphicsExtensions{.png,.pdf} |
上面的命令的作用是,如果在同一位置中,两个拥有相同文件名,但是后缀不同的文件(例如venndiagram.pdf
和venndiagram.png
),那么位置在前的版本将会被使用(这个例子中的png)。如果没有png文件,那么pdf文件会被使用。
当文档完成之后,为了使用高分辨率的pdf图片,我们可以更换后缀的顺序:
1 | \DeclareGraphicsExtensions{.pdf,.png} |
如果pdf图片还没有转换为png格式,我们可以在LaTeX中直接生成低分辨率的png图片。我们首先在序言中引入下面的命令(在\usepackage{graphicx}
命令之后):
1 | \usepackage{epstopdf} |
如果venndiagram2.pdf
存在,但是venndiagram2.png
不存在,那么venndiagram2-pdf-converted-to.png
文件将会被创建。命令convert #1
用来执行转换操作,你也可以对它添加额外的参数,例如convert -density 100 #1
。
这里还有一些重要的事情需要注意:
- 为了让自动转换正常工作,我们在执行
pdflatex
命令的时候,需要添加--shell-escape
参数 - 对于最终的_生产_版本,我们必须把
\epstopdfDeclareGraphicsRule
命令注释掉。这样只有高分辨率的图片会被加载。我们还需要改变顺序的优先级。
参考指南
LaTeX 单位和长度
缩写 | 定义 |
---|---|
pt | 一个点,默认的长度单位。大约相当于0.3515mm |
mm | 毫米 |
cm | 厘米 |
in | 英寸 |
ex | 在当前字体大小的情况下字母x的高度 |
em | 在当前字体大小的情况下字母m的宽度 |
\columnsep | 列之间的距离 |
\columnwidth | 列的宽度 |
\linewidth | 当前环境下行的宽度 |
\paperwidth | 页面的宽度 |
\paperheight | 页面的高 |
\textwidth | 文本的宽度 |
\textheight | 文本的高度 |
\unitlength | 在picture 环境下units的长度 |
LaTeX中图片的类型
latex
如果你使用latex
来编译,我们只可以使用EPS格式的图片,这种格式是矢量格式。
pdflatex
如果你使用pdflatex
来生成pdf文档,我们可以使用下面格式的图片:
1 | JPG: Best choice if we want to insert photos |
矢量图片或者位图?
图片可以是矢量的,或者是位图(bit-map)。一般来说,我们并不需要关心图片的格式。不过如果我们知道图片格式之间的差异,我们就可以选择一种合适的图片格式来使用。如果我们的图片是矢量的,那么它应该是PDF或者EPS。如果我们的图片是位图,那么它应该是JPG或者PNG。在PDF或者EPS中存储bit-map会消耗大量的存储空间。
引用说明
参考:在LaTeX中插入图片