LaTeX表格绘制方法备忘二

使用环境

  • 操作系统:Ubuntu 16.04 64位桌面版
  • LaTeX工具:TeXstudio 2.10.8
  • 编译方式:LuaLaTeX

3、绘制一列多行合并的表格

  
完整代码如下:

\documentclass{book}
%
\usepackage{ctex}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}% 支持表格的多行合并
%
\geometry{a4paper, left = 3.17cm, right = 3.17cm, top = 2.54cm, bottom = 2.54cm}
%
%
\setlength{\parindent}{0pt}
%
\begin{document}
%
\begin{center}
  \heiti 表1-6 Pascal的语句\songti\small\\
  \begin{tabular}{m{2.6cm}|m{8.0cm}|m{4.2cm}}
    \bottomrule
    \hfil 语句名称 &\hfil 语法格式 &\hfil 示例\\
    \hline
    赋值语句 & <变量名>:=<表达式>; & a:=32;\\
    \hline
    \multirow{2}*{IF语句} & IF <布尔表达式> THEN <语句>; & IF a=3 THEN a:=4;\\
    \cline{2-3}
    ~ & IF <布尔表达式> THEN\newline\mbox{\hspace{8ex}}<语句1>\newline ELSE\newline\mbox{\hspace{8ex}}<语句2>; & IF a = 3 THEN\newline\mbox{\hspace{4ex}} a:=4\newline ELSE\newline\mbox{\hspace{4ex}}x=5;\\
    \hline
    WHILE 语句 & WHILE <布尔表达式> DO\newline\mbox{\hspace{8ex}}<语句>; & WHILE a<3 DO \newline\mbox{\hspace{8ex}}a:a+1;\\
    \hline
    REPEAT 语句 & REPEAT\newline\mbox{\hspace{8ex}}<语句1>;\newline\mbox{\hspace{8ex}}...\newline\mbox{\hspace{8ex}}<语句n>;\newline UNTIL<布尔表达式>; & REPEAT\newline\mbox{\hspace{8ex}}a:a+1;\newline\mbox{\hspace{8ex}}b:=b+1;\newline UNTIL a>b;\\
    \hline
    \multirow{2}*{FOR语句} & FOR <循环变量名>:=<初值> TO <终值> DO;\newline\mbox{\hspace{8ex}}<语句1> & FOR i:=1 TO 10 DO\newline\mbox{\hspace{8ex}}j:=j+1;\\
    \cline{2-3}
    ~ & FOR <循环变量名>:=<初值> DOWNTO <终值> DO;\newline\mbox{\hspace{8ex}}<语句1> & FOR i:=10 TO 1 DO\newline\mbox{\hspace{8ex}}j:=j+1;\\
    \hline
    BREAK 语句 & BREAK; & \\
    \hline
    CONTINUE 语句 & CONTINUE; & \\
    \hline
    GOTO 语句 & GOTO <标号>; & GOTO L1;\\
    \hline
    复合语句 & BEGIN <语句序列> END; & BEGIN a:=1; b:=2; END;\\
    \hline
    CASE 语句 & CASE <分支表达式> OF\newline\mbox{\hspace{8ex}}<常量1>:<语句1>;\newline\mbox{\hspace{8ex}}...\newline\mbox{\hspace{8ex}}<常量n><语句n>;\newline\mbox{\hspace{8ex}}END; & CASE a OF\newline\mbox{\hspace{8ex}}1: i:=a+1;\newline\mbox{\hspace{8ex}}2: i=a+2;\newline\mbox{\hspace{8ex}}3: i:=a+3;\newline END;\\
    \hline
    内嵌汇编语句 & ASM <汇编程序段字符串>, <参数信息> END; & ASM 'MOV AX, BX', "END;\\
    \toprule[2pt]
  \end{tabular}
\end{center}
%
\end{document}

效果如下:
LaTeX表格绘制方法备忘二_第1张图片
说明:
  1、本例比“备忘一”中多加了一个宏包:multirow,用于支持多行合并。
  2、本例中标题与内容的对齐方式不一样,标题是居中,我使用\hfil(不是\hfill)把标题“推到”中间。内容是左对齐,系统默认就是这样,不用另外设置。
  3、在语法格式与示例中有多行的代码,这里使用的是\newline来换行,双反斜杠会报错。语句中的缩进是用\mbox{\hspace{}}命令来实现的,其中的单位ex指的是每个字符的宽度,这是个相对值,随用户设定的字体大小而变化。
  4、存在合并行的地方,绘制横线的命令是\cline(起始行-结束行)。
  5、多行合并命令:\multirow{行数}{宽度}{内容}。如果不想设置宽度就用*号代替(可以省略大括号),例如:\multirow{2}*{IF语句}。一般我会在希望内容竖排时设置宽度(要加大括号),设定一个只能容纳一个字符的值后,系统就会对内容进行自动换行,这样就呈现出竖排的效果,例如:\multirow{13}{0.5cm}{算术}。
  6、目前还有些不足之处,如“IF 语句”一行,“IF 语句”并未垂直居中,目前还未找到解决方法。
  

4、绘制有颜色的表格

  
完整代码如下:

\documentclass{book}
%
\usepackage{ctex}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{colortbl} % 表格颜色
\usepackage[dvipsnames, svgnames, x11names]{xcolor}
%
\geometry{a4paper, left = 3.17cm, right = 3.17cm, top = 2.54cm, bottom = 2.54cm}
%
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
%
\setlength{\parindent}{0pt}
%
\begin{document}
%
\begin{center}
  \heiti 表2.1 QList、QLinkedList和QVector容器的时间复杂度比较\songti
  \begin{tabular}{C{2.5cm}|C{2.5cm}|C{2.5cm}|C{2.5cm}|C{2.5cm}}
  \bottomrule[2pt]
  \rowcolor{gray!20}
  容器类 & 查找 & 插入 & 头部添加 & 尾部添加\\
  \hline
  QList & O(1) & O(n) & Amort.O(1) & Amort.O(1)\\
  \hline
  QLinkedList & O(n) & O(1) & O(1) & O(1)\\
  \hline
  QVector & O(1) & O(n) & O(n) & Amort.O(1)\\
  \toprule[2pt]
  \end{tabular}
\end{center}
%
\begin{center}
  \heiti 表2.1 QList、QLinkedList和QVector容器的时间复杂度比较\songti
  \begin{tabular}{>{\centering\arraybackslash\columncolor{blue!20}}p{2.5cm}|C{2.5cm}|C{2.5cm}|C{2.5cm}|C{2.5cm}}
  \bottomrule[2pt]
  容器类 & 查找 & 插入 & 头部添加 & 尾部添加\\
  \hline
  QList & O(1) & O(n) & \textcolor{red}{Amort.O(1)} & Amort.O(1)\\
  \hline
  QLinkedList & O(n) & O(1) & O(1) & O(1)\\
  \hline
  QVector & O(1) & O(n) & O(n) & Amort.O(1)\\
  \toprule[2pt]
  \end{tabular}
\end{center}
%
\end{document}

效果如下:
LaTeX表格绘制方法备忘二_第2张图片
说明:
  1、此例中新增了支持表格底色的宏包:colortbl。
  2、在绘制列的底色时,绘制颜色的命令不能直接与我们定义的列类型C一起使用(例如C{2.5cm}\columncolor{blue!20},这样是错的),需要自己重新按照例子中的样式写。
  3、这里还顺带举了一个设置字体颜色的例子,在表格中要注意最好是使用本例中的\textcolor{颜色}{文字}命令来给文字上色。使用\color之类的命令,虽然也可上色,但会莫名其妙的在文字前空上一排,从而影响表格的美观。

你可能感兴趣的:(LaTeX)