LaTeX中TikZ绘图备忘二

在以下环境测试过

  • 操作系统:Ubuntu 16.04 64位桌面版
  • LaTeX工具:TeXstudio 2.10.8
  • 编译方式:LuaLaTeX
示例四、chains库的使用

  完整代码

\documentclass{article}
%
\usepackage{ctex}
\usepackage{geometry}
\usepackage[dvipsnames, svgnames, x11names]{xcolor}
\usepackage{tikz}
\usepackage{xstring}
%
\usetikzlibrary{positioning, arrows.meta, chains}
%
% 定义箭头样式
\tikzset{
  arrow1/.style = {
    draw = purple, thick, -{Latex[length = 4mm, width = 1.5mm]},
  }
}
%
\begin{document}
%
\begin{center}
  \begin{tikzpicture}[start chain=1 going right,node distance=-0.15mm]
    \node[on chain=1] at (-1.5, -0.4){……};
    \foreach \x in {1,...,13} {
      \x, \node[draw, on chain=1, minimum size=8mm] {\StrChar{while { }(a>10)}{\x}};
    }
    \node[on chain=1] at (9.5, -0.4){……};
    \draw[arrow1,on chain=1](-0.6,-1.7)--node[left,yshift=-20pt,xshift=10pt]{上一个单词起始位置}(-0.6,-0.8);
    \draw[arrow1,on chain=1](3.4,-1.7)--node[left,yshift=-20pt,xshift=10pt]{搜索指针}(3.4,-0.8);
    \draw[arrow1,on chain=1](5,-1.7)--node[left,yshift=-20pt,xshift=10pt]{起始位置}(5,-0.8);
  \end{tikzpicture}
  \heiti\\ 图2-1 词法分析器起始位置\songti
\end{center}
%
\end{document}

效果如下:
LaTeX中TikZ绘图备忘二_第1张图片
说明:
  1、本例中新增了TikZ中的chains库,并且为了处理字符串包含了宏包xstring。
  2、如果不指定node的尺寸大小,生成的方框大小将会随着内容而变化,很不整齐,所以最好指定大小。除了使用例中的minimum size设置外,还可使用text width、text height与text depth配合设置。
  3、注意里面的循环语句\foreach,灵活使用可以省不少事。
  4、字符串命令 \StrChar{字符串}{位置} 是从字符串中按指定的位置取出单个字符。相关字符串函数还有不少,可去xstring宏包的说明文档上查询。

示例五、流程图一

  完整代码

\documentclass{article}
%
\usepackage{ctex}
\usepackage{geometry}
\usepackage[dvipsnames, svgnames, x11names]{xcolor}
\usepackage{tikz}
\usepackage{xstring}
%
\usetikzlibrary{positioning, arrows.meta, shapes}
%
% 定义淡黄色
\definecolor{umlYellow}{RGB}{255, 251, 214}
%
% 定义箭头样式
\tikzset{
  arrow1/.style = {
    draw = purple, thick, -{Latex[length = 4mm, width = 1.5mm]},
  }
}
%
% 流程图样式
\tikzset{
  base/.style={
    draw=purple,
    fill=umlYellow,
    align=center,
    minimum height=4ex,
  },
  proc/.style={
    base,
    rectangle,
  },
  term/.style={
    proc,
    text width=4em,
    rounded corners=3mm,
  },
  test/.style={
    diamond,
    draw=purple,
    fill=umlYellow,
    aspect=2,% 控制纵横比例,越大就越扁
    align=center,
  },
}
\begin{document}
%
\begin{center}
  \begin{tikzpicture}
    \node[term](begin){开始};
    \node[test,text width=8em,below=of begin](f1){当前搜索指针指向的字符是否为字母};
    \node[term,right= -0.3cm of f1,yshift=-1.5cm](error){出错};
    \node[proc,below=of f1](f2){搜索指针后移一个字符};
    \node[test,right=3cm of f1,yshift=1cm](f3){当前搜索指针\\ 指向的字符是否为\\ 字母或数字};
    \node[proc,below=of f3](f4){搜索指针后移一个字符};
    \node[term,below=2cm of f4,xshift=-1.5cm](end){结束};
    % ------------------------------------------------------
    \path[arrow1](begin)--(f1);
    \path[arrow1](f1)--node[right]{Y}(f2);
    \path[arrow1](f1)-|node[right]{N}(error);
    \path[arrow1](f2)|-++(45mm,-5mm)--++(0,65mm)-|(f3);
    \path[arrow1](f3)--node[right]{Y}(f4);
    \path[arrow1](f4)|-++(-42mm,-10mm)|-(f3);
    \path[arrow1](f3.east)-|++(5mm,-45mm)node[right,yshift=23mm]{N}-|(end);
  \end{tikzpicture}
  \heiti\\ 图2-2 识别Pascal标识符的程序流程图\songti
\end{center}
%
\end{document}

效果如下:
LaTeX中TikZ绘图备忘二_第2张图片
说明:
  1、本例中因为使用了diamond菱形图,所以需要载入TikZ中的shapes库。
  2、绘制过程还是先定义图形、箭头样式,然后绘制节点,最后连线。注意这里绘制线段的命令是\path,不是以前用的\draw。
  3、对于有规律的图形,可以使用chains、matrix等库以及循环、字符串、数学命令等来更快速的完成。

你可能感兴趣的:(LaTeX)