LaTeX宏包TikZ绘图示例——Go语言起源图

  本例所绘图形选自《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}

效果


LaTeX宏包TikZ绘图示例——Go语言起源图


说明

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

上一篇:Freescale OSBDM JM60仿真器


下一篇:Android Studio导入jar包