目录:

问题复现

在使用pem_v1模板时,无法使用\cline命令。

\documentclass{pem_v1}

\begin{document}
    \begin{tabular}{c|c|c|l}
    1 & 2 & 3 & 4 \\
    \cline{1-2}
\end{tabular}
\end{document}

报错如下:

! Extra alignment tab has been changed to \cr.
<template> \endtemplate 
                        
l.6     \cline{1-2}
                    
You have given more \span or & marks than there were
in the preamble to the \halign or \valign now in progress.
So I'll assume that you meant to type \cr instead.

最小样例

由于pem_v1模板过于复杂,无法直接找到问题所在。因此,我们需要一个最小样例来复现问题。

注意:包内默认启用\makeatletter,复制到主文件时,需要手动添加。

如下代码可以复现问题。删掉\multispan\sp@n两个命令,问题消失。

\documentclass{article}

\makeatletter

% Load all necessary packages
\RequirePackage[T1]{fontenc}

% Table and array parameters
\setlength\arraycolsep{.5em}
\setlength\tabcolsep{.5em}
\setlength\arrayrulewidth{.25pt}
\setlength\doublerulesep{2.5pt}
\renewcommand\arraystretch{1}

%%%For New Table
\newcount\mscount
\def\multispan#1{\omit \mscount#1\relax
  \loop\ifnum\mscount>\@ne \sp@n\repeat}
\def\sp@n{\span\omit\advance\mscount\m@ne}

\begin{document}
    \begin{tabular}{c|c|c|l}
    1 & 2 & 3 & 4 \\
    \cline{1-2}
\end{tabular}
\end{document}

解决方案

首先查看\multispan\sp@n两个命令的原始定义。

> \multispan=macro:
->\omit \@multispan .
> \sp@n=macro:
->\span \omit \advance \@multicnt \m@ne .

将其复制到主文件中,问题消失。 代码如下:

\documentclass{pem_v1}

\makeatletter
\def\multispan{\omit \@multispan}
\def\sp@n{\span \omit \advance \@multicnt \m@ne}
\makeatother

\begin{document}
    \begin{tabular}{c|c|c|l}
    1 & 2 & 3 & 4 \\
    \cline{1-2}
\end{tabular}
\end{document}