LaTeX之表格中多列合并时表格竖线不显示的解决方法

在LaTeX表格绘制中,多列合并通常会使用\multicolumn命令来实现。这个命令会造成所在单元格中的左右竖线不显示,本文介绍解决这个问题的方法。下面的示例代码中列出了处理前与处理后的代码。


环境

  • Ubuntu 20.04
  • LuaLaTeX 1.10.0

完整示例代码

% 博客园,繁星间漫步,陆巍的博客
\documentclass{article}

% 注意宏包顺序,有可能会报错
\usepackage{ctex}% 中文支持
\usepackage{geometry}% 用于页面设置
\usepackage{booktabs}% 增强表格功能
\usepackage{tabularx}% 更多表格功能
\usepackage{multirow}% 支持表格的多行合并
\usepackage{qtree}% 绘制树形图

% 设置为A4纸,边距适中模式(参考永中office)
\geometry{
  width = 210mm,
  height = 297mm,
  left = 19.1mm,
  right = 19.1mm,
  top = 25.4mm,
  bottom = 25.4mm
}


% 定义表格对齐方式
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}

\begin{document}

\section{未经处理的表格}
\begin{tabular}{|C{10mm}C{10mm}C{20mm}C{20mm}|C{10mm}C{10mm}C{20mm}C{20mm}|}
  \bottomrule
  \multicolumn{3}{c}{推导步骤} & 选择候选式 & \multicolumn{3}{c}{推导步骤} & 选择候选式\\
  \hline
  E & \Rightarrow & E + E & E \rightarrow E + E & E & \Rightarrow & E * E & E \rightarrow E * E\\
  \hline
  & \Rightarrow & 3 + E & E \rightarrow var & & \Rightarrow & E + E * E & E \rightarrow E + E\\
  \hline
  & \Rightarrow & 3 + E * E & E \rightarrow E * E & & \Rightarrow & 3 + E * E & E \rightarrow var\\
  \hline
  & \Rightarrow & 3 + 4 * E & E \rightarrow var & & \Rightarrow & 3 + 4 * E & E \rightarrow var\\
  \hline
  & \Rightarrow & 3 + 4 * 6 & E \rightarrow var & & \Rightarrow & 3 + 4 * 6 & E \rightarrow var\\
  \hline
  \multicolumn{4}{c}{\Tree [.E [.E 3 ] + [.E [.E 4 ] * [.E 6 ]]]} & \multicolumn{4}{c}{\Tree [.E [.E [.E 3 ] + [.E 4 ]] * [.E 6 ]]}\\
  \toprule
\end{tabular}

\centerline{图3-3 二义性文法推导}


\section{处理后的表格}
% \multicolumn语句会造成表格中的竖线不显示,左边第1根竖线只能用增加一个空列来显示;
% 后面的竖线可以手工用\vline添加竖线。
\begin{tabular}{|p{0mm}C{10mm}C{10mm}C{20mm}C{20mm}|C{10mm}C{10mm}C{20mm}C{20mm}|}
  \bottomrule
  & \multicolumn{3}{c}{推导步骤} & 选择候选式 & \multicolumn{3}{c}{推导步骤} & 选择候选式\\
  \hline
  & E & \Rightarrow & E + E & E \rightarrow E + E & E & \Rightarrow & E * E & E \rightarrow E * E\\
  \hline
  & & \Rightarrow & 3 + E & E \rightarrow var & & \Rightarrow & E + E * E & E \rightarrow E + E\\
  \hline
  & & \Rightarrow & 3 + E * E & E \rightarrow E * E & & \Rightarrow & 3 + E * E & E \rightarrow var\\
  \hline
  & & \Rightarrow & 3 + 4 * E & E \rightarrow var & & \Rightarrow & 3 + 4 * E & E \rightarrow var\\
  \hline
  & & \Rightarrow & 3 + 4 * 6 & E \rightarrow var & & \Rightarrow & 3 + 4 * 6 & E \rightarrow var\\
  \hline
  & \multicolumn{4}{c}{\Tree [.E [.E 3 ] + [.E [.E 4 ] * [.E 6 ]]]}\vline & \multicolumn{4}{c}{\Tree [.E [.E [.E 3 ] + [.E 4 ]] * [.E 6 ]]}\vline\\
  \toprule
\end{tabular}

\centerline{图3-3 二义性文法推导}

\end{document}

效果

LaTeX之表格中多列合并时表格竖线不显示的解决方法

说明

  1. 对于表格左边第一根竖线缺失的情况,处理稍微麻烦一些,需要通过增加一个宽度为0的列来解决,使用\vline等方法都会报错。
  2. 第一根竖线后的竖立都可以通过\vline命令来补上缺失的竖线。
上一篇:Latex图表并列


下一篇:latex 引用网页 网址 网站 格式