本例所绘图形选自《Go语言程序设计》(作者:Alan A. A. Donovan与Brian W. Kernighan)一书的前言部分。

完整代码

\documentclass{article}
%
\usepackage{ctex} % 汉字支持
\usepackage{geometry} % 页面布局支持
\usepackage{tikz} % 绘图支持
%
% 加载TikZ内的各种库
\usetikzlibrary{positioning, arrows.meta, chains}
%
\begin{document}
% 博客园陆巍的博客https://www.cnblogs.com/atthefirst/
\textbf{Go语言起源图}
\begin{center}
  \begin{tikzpicture}[
    every node/.style={text width=4cm,align=center},
    arrow1/.style={-{stealth[angle'=45]},thick},
    node distance=1.0cm,
  ]
    \renewcommand{\baselinestretch}{1.0}% 修改行间距为1倍
    % -------------------- 中间节点 --------------------
    \node(c1){\textbf{ALGOL 60}\\\small (Backus et al., 1960)};
    \node[below=of c1](c2){\textbf{Pascal}\\\small (Wirth, 1970)};
    \node[below=of c2](c3){\textbf{Modula-2}\\\small (Wirth, 1980)};
    \node[below=of c3](c4){\textbf{Oberon}\\\small (Wirth \& Gutknecht,\\ 1986)};
    \node[right=0.5cm of c4,yshift=-1cm](c41){\textbf{Object Oberonn}\\\small (Mössenböck, Templ \& Griesemer, 1990)};
    \node[below=of c4](c5){\textbf{Oberon-2}\\\small (Wirth \& Mössenböck,\\ 1991)};
    \node[text width = 6.0cm,below=2cm of c5](c6){\textbf{Go}\\\small (Griesemer, Pike \& Thompson, 2009)};
    % -------------------- 左侧节点 --------------------
    \node at(-5cm,-3cm)(l1){\textbf{CSP}\\\small (Hoare, 1978)};
    \node[below=of l1](l2){\textbf{Squeak}\\\small (Cardelli \& Pike, 1985)};
    \node[below=of l2](l3){\textbf{Newsqueak}\\\small (Pike, 1989)};
    \node[below=of l3](l4){\textbf{Alef}\\\small (Winterbottom, 1992)};
    % -------------------- 右侧节点 --------------------
    \node at(7cm,-2cm)(r1){\textbf{C}\\\small (Ritchie, 1972)};
    % -------------------- 连线 --------------------
    \draw[arrow1](c1)--(c2);
    \draw[arrow1](c2)--(c3);
    \draw[arrow1](c3)--(c4);
    \draw[arrow1](c4)--(c41);
    \draw[arrow1](c41)--(c5);
    \draw[arrow1](c4)--(c5);
    \draw[arrow1](c5)--(c6);
    \draw[arrow1](l1)--(l2);
    \draw[arrow1](l2)--(l3);
    \draw[arrow1](l3)--(l4);
    \draw[arrow1](l4)--(c6);
    \draw[arrow1](c1)--(r1);
    \draw[arrow1](c2)--(l3);
    \draw[arrow1](r1)(c6)(node cs:name=r1) .. controls +(1,-10) and +(1.2,1) .. (node cs:name=c6);
  \end{tikzpicture}
\end{center}

效果



说明

  1、这里对节点与箭头线段style的定义放在了tikzpicture环境定义的参数设置中。实际工作中,对于经常使用的style应该单独用文件保存,方便管理维护。
  2、注意从C到Go的那根曲线绘制方法的原理,使用过矢量图绘制软件的朋友应该不会陌生。

LaTeX宏包TikZ绘图示例——Go语言起源图的更多相关文章

  1. latex目录标题常用宏包说明与示例

    http://blog.sina.com.cn/s/blog_5e16f1770100gyxn.html

  2. LaTeX自定义宏包、类文件的默认搜索路径设置方法

      对于自定义的LaTeX宏包与类,在调用时可以通过在命令\documentclass{}与\usepackage{}命令中指定完整路径或者相对路径,这样确实可以调用,但是编译时总是有烦人的警告信息, ...

  3. Windows 下 LaTeX 手动安装宏包(package)以及生成帮助文档的整套流程

    本文简单介绍如何手动安装一个 LaTeX 宏包. 一般来说,下载的 TeX 发行版已经自带了很多宏包,可以满足绝大部分需求,但是偶尔我 们也可能碰到需要使用的宏包碰巧没有安装的情况,这时我们就需要自己 ...

  4. LaTeX源代码显示宏包listings应用备忘之新语言定义

      我目前了解的LaTeX中有关源代码显示的宏包有两个,这里介绍其中的listings宏包.listings宏包中已经定义了部分计算机语言的显示样式,但还是有些语言没有定义,我们一起看一下如何定义新的 ...

  5. 在LaTeX中利用preview宏包和tikz宏包生成单图pdf

    有时候我们利用tikz宏包画出的图片后,只想生成一个单图pdf,而且pdf的页面大小与图片相同,以便于以后再次用latex插入. 可以与preview宏包进行搭配,页面大小由图像大小决定,可以通过改变 ...

  6. [原创][LaTex]LaTex学习笔记之框架及宏包

    0. 简介 LaTex在书写文档时的最基本单元就是首部的写作,变相的也可以说是头文件.本文章就来总结一下文档的基本格式和常用宏包. 1. 基本单元 基本单元需要对LaTex语法有一定的了解,这个很简单 ...

  7. LaTeX的一些宏包及细节知识

    文章来源:LaTeX的一些宏包及细节知识http://blog.chinaunix.net/uid-20289887-id-1710422.html ps:我的机器上软件并不能直接运行通,下面“代码” ...

  8. TeX系列: tikz-3dplot绘图宏包

    tikz-3dplot包提供了针对TikZ的命令和坐标变换样式, 能够相对直接地绘制三维坐标系统和简单三维图形. tikz-3dplot包当前处于初创期, 有很多功能有待完善. 安装过程如下: (1) ...

  9. LaTeX的tasks宏包

    tasks 宏包 LaTeX的列表(list)通常是将项(item,条目)一个一个垂直的平行显示,所谓"列"表的由来. 水平分列列表,即将多个项分散到各列而不是一列,在出考卷的选择 ...

随机推荐

  1. java变量常量

    1. java 变量遵循先声明,再赋值,后使用的原则. 一个变量可以只声明,不赋值,没有问题(只是这个变量没有实际意义,但完全没有问题).但如果想要使用它,那么就一定要给它赋值,而大多数时候我们又不知 ...

  2. 三、vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面

        1.路由配置:所有的启动文件都在最初始的main.js文件里面,这个文件中首先需要引入: 2.路由文件配置说明: 3.如何获取页面url的参数? this.$route.query 4.页面之 ...

  3. 3.HTML颜色

    一,HTML 颜色采用的是 RGB 颜色,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道的颜色. <p st ...

  4. 机器学习中正则惩罚项L0/L1/L2范数详解

    https://blog.csdn.net/zouxy09/article/details/24971995 原文转自csdn博客,写的非常好. L0: 非零的个数 L1: 参数绝对值的和 L2:参数 ...

  5. Windows 7系统启动MongoDB失败解决办法?

    问题现象: 1.在配置Python环境安装MongoDB时发现在“服务”里面手动启动失败,报错如下: 2.在cmd里面也无法启动,注意这里要以管理员身份启动cmd哦 问题解决: 1.需要先在bin下执 ...

  6. MySQL 5.7.24 privileges有哪些?

    root@localhost:3306.sock [mysql]>select version();+------------+| version()  |+------------+| 5.7 ...

  7. EXC_BAD_ACCESS错误

    EXC_BAD_ACCESS错误 一直都是使用ARC开发,咋就莫名其妙的出现这种EXC_BAD_ACCESS错误. 一直都是是怀疑在block中有着特殊处理,导致了使用时出现了这种错误,查找了好久.. ...

  8. Linux nl命令详解

    nl常见命令参数 nl命令在linux系统中用来计算文件中行号 -b  :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n): -b t :如果有空 ...

  9. JS传递函数并且调用

    封装的函数: function getDataByJsonP(methName, inData, fn) { // 这里fn可以直接传入函数名字 $.ajax({ url: '', //请求的url地 ...

  10. nginx反向代理跨域基本配置与常见误区

    最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一 ...