LaTex图和表之直接在 LaTeX 中绘制图表

介绍

LaTeX的内置环境可用于创建图表/图形 - 您无需加载任何外部软件包即可使用它,但是已经编写了诸如pict2epicture之类的软件包来增强或改进其功能。

本文简要介绍了picture该环境,所有示例都使用 pict2e 包。以下资源中提供了更广泛的文档和一系列有用的示例:

LaTeX2e 非官方参考手册
LaTeX2ε的简短介绍(见第5章)
维基百科
picture-mode在tex.stackexchange的问题标记
pict2e 软件包文档
TikZ / PGFMetaPostPSTricksAsymptote等强大而复杂的图形工具相比,picture环境似乎非常有限,但是,不时地,它可能足以满足您的需求。

创建新图片

创建新图片通常涉及以下步骤:

  • 定义要使用的绘图单位的大小;
  • 声明一个定义图片大小的picture环境;
  • 使用 \put\multiput\\qbezier命令绘制各个图形组件。

定义绘图单位的大小

要创建图片,通常首先通过\unitlengthpicture命令设置绘图单位,该命令必须在环境之外使用。例如,如果您编写

\setlength{\unitlength}{1cm}
绘图单位将被解释为1cm的倍数。默认单位为 1pt

定义图片的大小

环境的一般形式如下picture

\begin{picture}(width, height)(Xoffset, Yoffset)
 ...
\end{picture}

  • widthheight是以\unitlength为单位的值,用于定义图片的大小。LaTeX使用这些值来创建一个框,其尺寸为
框(图片)宽度 = ×width\unitlength
框(图片)高度 = ×height\unitlength
  • (Xoffset, Yoffset)是一个可选坐标,用于设置图片的原点(左下角),表示为相对于默认位置的偏移量。 XoffsetYoffset也由的当前\unitlength值确定的单位表示

请注意,Xoffset,Yoffset并且不影响LaTeX保留的空间量;例如箱体尺寸。

了解图片尺寸

我们将创建两张图片,两张图片都使用\setlength{\unitlength}{1cm}和每个图片widthheight均为3个单位。

第一张图片使用默认原点:(0,0)

\begin{picture}(3,3)
...
\end{picture}

第二张图片通过以下方式偏移(平移)原点:(1,1)

\begin{picture}(3,3)(1,1)
...
\end{picture}

绘制图形

图形是使用一系列命令例如(\put \multiput \qbezier)创建的,这些命令生成构建图片或插图的各个“组件”(或“对象”):

  • \put(x, y){component}绘制component在(x,y)位置 。
  • \multiput(x, y)(dx, dy){n}{component}绘制componentn次:从(x, y)位置开始,然后以(dx, dy)为参照值反复平移,以重绘。
  • \qbezier[n](x1, y1)(x, y)(x2, y2):绘制一条二次贝塞尔曲线,其中:
    n一个可选整数,用于确定所用点数绘制/生成曲线
    (x1, y1)是曲线的起点
    (x2, y2)是曲线的终点
    (x, y)表示(二次)贝塞尔曲线控制点

component(组件)是通常使用图形基元(如\line \oval \circle \vector等)生成的图形元素 — 有关可用基元的详细信息,请参阅LaTeX2e 非官方参考手册LaTeX2ε的简短介绍(见第5章)

注: pict2e包扩展了picture原始环境,提供了几个用于绘制贝塞尔曲线的命令:\bezier \qbezier \cbezier\qbeziermax

了解偏移和原点

在下面的示例中,\put命令用于绘制彩色点,这些点指示图形中的关键坐标(位置)。这两个示例都使用\fbox的命令在 LaTeX 创建的包含我们图片的框周围绘制边框,显示图形的边界框。

示例 1:使用默认原点

\documentclass{article}
\usepackage[pdftex]{pict2e}
\usepackage[dvipsnames]{xcolor}
\begin{document}
\setlength{\unitlength}{1cm}
\setlength{\fboxsep}{0pt}

This is my picture\fbox{%
\begin{picture}(3,3)
\put(0,0){{\color{blue}\circle*{0.25}}\hbox{\kern3pt \texttt{(0,0)}}}
\put(3,3){{\color{red}\circle*{0.25}}\hbox{\kern3pt \texttt{(3,3)}}}
\end{picture}}
\end{document}

在这里插入图片描述

\fbox命令在图形的边界框周围绘制一个边框,显示 LaTeX 保留的空间(区域):

图片宽度 = width x \unitlength = 3 × 1cm = 3cm。
图片高度 = height x \unitlength = 3 × 1cm = 3cm。
第一个示例显示,原点(0,0),位于\begin{picture}执行命令的点,紧跟在文本“这是我的图片”之后。此外,右上角位于(3,3)
位置 ,(width,height)提供给\begin{picture}(3,3)的值。

示例 2:将原点移位 (1,1)

\documentclass{article}
\usepackage[pdftex]{pict2e}
\usepackage[dvipsnames]{xcolor}
\begin{document}
\setlength{\unitlength}{1cm}
\setlength{\fboxsep}{0pt}

This is my picture\fbox{%
\begin{picture}(3,3)(1,1)
\put(0,0){{\color{blue}\circle*{0.25}}\hbox{\kern3pt\texttt{(0,0)}}}
\put(1,1){{\color{orange}\circle*{0.25}}\hbox{\kern3pt\texttt{(1,1)}}}
\put(3,3){{\color{red}\circle*{0.25}}\hbox{\kern3pt\texttt{(3,3)}}}
\put(4,4){{\color{black}\circle*{0.25}}\hbox{\kern3pt\texttt{(4,4)}}}
\end{picture}}
\end{document}

在这里插入图片描述第二个示例显示了移位原点的效果,并突出显示了一些关键点:

\fbox(width,height)(1,1)创建的边框显示图形的边界框(由 LaTeX 创建的框的宽度和高度)不受移位原点的影响:它仍然由提供给\begin{picture}(3,3)
图片宽度 = width x \unitlength = 3 × 1cm = 3cm
图片高度 = width x \unitlength = 3 × 1cm = 3cm
绘图元素不会限制(剪切)到 LaTeX 创建的区域(边界框尺寸)。例如,蓝点和(0,0)坐标绘制在 \fbox生成的边界线之外,这表示边界框。
用户需要确保绘图元素保持在定界框中,并且不覆盖任何周围的文本。
原点(0,0), 不再紧跟在文本“这是我的图片”之后,在 \begin{picture}执行命令的点上:原点现在向左移动 1 个单位,向下移动 1 个单位右上角现在位于(4,4)该位置。

图片环境示例

LaTeX2e 非官方参考手册中的示例

LaTeX2e非官方参考手册包含许多picture环境示例,其中一些示例与在 Overleaf 中打开它们的链接一起在此处复制,允许您编辑和浏览代码。

示例 1:\vector 命令

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
	\setlength{\unitlength}{1cm}
	\begin{picture}(6,6)      % picture box will be 6cm wide by 6cm tall
		\put(0,0){\vector(2,1){4}}  % for every 2 over this vector goes 1 up
		\put(2,1){\makebox(0,0)[l]{\ first leg}}
		\put(4,2){\vector(1,2){2}}
		\put(5,4){\makebox(0,0)[l]{\ second leg}}  
		\put(0,0){\vector(1,1){6}}
		\put(3,3){\makebox(0,0)[r]{sum\ }}  
	\end{picture}
\end{document}

此示例生成以下输出:
在这里插入图片描述

示例 2:\qbezier\line\vector\thinlines\thicklines 命令
请注意,在\qbezier中不使用该命令,而在\put{...}中使用其他基元命令(如 \line``\vector)。

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{picture}(8,4)
  \thinlines % Start with thin lines
  \put(0,0){\vector(1,0){8}}  % x axis
  \put(0,0){\vector(0,1){4}}  % y axis
  \put(2,0){\line(0,1){3}}    % left side
  \put(4,0){\line(0,1){3.5}}  % right side
  \thicklines % Use thicker lines for the \qbezier commands
  \qbezier(2,3)(2.5,2.9)(3,3.25)
  \qbezier(3,3.25)(3.5,3.6)(4,3.5)
  \thinlines % Back to using thin lines
  \put(2,3){\line(4,1){2}}
  \put(4.5,2.5){\framebox{Trapezoidal Rule}}
\end{picture}
\end{document}

在这里插入图片描述
示例 3:\multiput\linethickness 命令

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{1cm}
\thicklines
\begin{picture}(10,10)
  \linethickness{0.05mm}
  \multiput(0,0)(1,0){10}{\line(0,1){10}} 
  \multiput(0,0)(0,1){10}{\line(1,0){10}}
  \linethickness{0.5mm}
  \multiput(0,0)(5,0){3}{\line(0,1){10}}
  \multiput(0,0)(0,5){3}{\line(1,0){10}}
\end{picture}
\end{document}

在这里插入图片描述

其他示例

贝塞尔基本曲线

下面的示例使用\qbezier该命令绘制贝塞尔曲线:

\qbezier(1,1)(5,5)(9,0.5)
请注意以下几点:

  • \qbezier命令不在\put命令中使用
  • 贝塞尔曲线的起点是(1,1)
  • 贝塞尔曲线的终点是(9,0.5)
  • 贝塞尔曲线控制点为(5,5)
  • 我们不使用可选整数来确定所用点数,绘制/生成贝塞尔曲线
\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{0.8cm}
\begin{picture}(10,5)
\thicklines
\qbezier(1,1)(5,5)(9,0.5)
\put(2,1){{Bézier curve}}
\end{picture}
\end{document}

在这里插入图片描述

椭圆形、线条和圆形

下面的示例演示 \line``\circle``\oval命令,并注意它们在\put{...} 命令中的用法:

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{1cm}
\thicklines
\begin{picture}(10,6)
\put(2,2.2){\line(1,0){6}}
\put(2,2.2){\circle{2}}
\put(6,2.2){\oval(4,2)[r]}
\end{picture}
\end{document}

在这里插入图片描述

以下是这些命令的说明:

  • \put(2,2.2){\line(1,0){6}}:使用“方向矢量”绘制长线单位6(1,0)
  • \put(6,2.2){\oval(4,2)[r]}:绘制一个以点(4,2)为中心的椭圆形。该参数是可选的,您可以使用[r][l][t][b] 来显示椭圆的右侧、左侧、顶部或底部。rltb
  • \put(2,2.2){\circle{2}}:绘制一个以点(2,2.2)为中心的圆,其直径为2。

组合线条、圆圈和文本

可以组合不同的基本元素来创建更复杂的图片。在此示例中,将几条线和几个圆圈组合在一起以创建图片,并结合文本来标记点:

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{0.8cm}
\begin{picture}(12,4)
\thicklines
\put(8,3.3){{\footnotesize $3$-simplex}}
\put(9,3){\circle*{0.1}}
\put(8.3,2.9){$a_2$}
\put(8,1){\circle*{0.1}}
\put(7.7,0.5){$a_0$}
\put(10,1){\circle*{0.1}}
\put(9.7,0.5){$a_1$}
\put(11,1.66){\circle*{0.1}}
\put(11.1,1.5){$a_3$}
\put(9,3){\line(3,-2){2}}
\put(10,1){\line(3,2){1}}
\put(8,1){\line(1,0){2}}
\put(8,1){\line(1,2){1}}
\put(10,1){\line(-1,2){1}}
\end{picture}
\end{document}

在这里插入图片描述

以下是使用的一些命令的摘要:

  • \thicklines:这会增加线条的粗细。\thinlines命令具有相反的效果。
  • \put(8,3.3){{\footnotesize $3$-simplex}}:文本“3-单纯形”插入到该点(8,3.3),字体大小设置为\footnotesize。相同的命令用于标记每个点。
  • \put(9,3){\circle*{0.1}}:这将绘制一个填充圆,其中心(9,3)为0.1小直径(绘图单位),因此可以用作点。
  • \put(10,1){\line(3,2){1}}:创建一条直线,从 开始,沿 长度为 1 的方向绘制(绘制单位)。(10,1)(3,2)

使用箭头
箭头也可以在环境中使用,所以下面是第二个示例:picture

\documentclass{article}
\usepackage[pdftex]{pict2e}
\begin{document}
\setlength{\unitlength}{0.20mm}
\begin{picture}(400,250)
\put(75,10){\line(1,0){130}}
\put(75,50){\line(1,0){130}}
\put(75,200){\line(1,0){130}}
\put(120,200){\vector(0,-1){150}}
\put(190,200){\vector(0,-1){190}}
\put(97,120){$\alpha$}
\put(170,120){$\beta$}
\put(220,195){upper state}
\put(220,45){lower state 1}
\put(220,5){lower state 2}
\end{picture}
\end{document}

在这里插入图片描述
该命令使用与:\vector \line语法相同

\put(120,200){\vector(0,-1){150}}:绘制一个起始点为 (120,200)、长度为150且绘制方向为(0,-1)的矢量。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐