pem_v1模板bug: 无法使用cline
目录:
问题复现
在使用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}