放错位置的 \noalign 错误

放错位置的 \noalign 错误
 \documentclass[a4paper]{article}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}

\begin{document}
\thispagestyle{empty}
\ensuremath
\begin{tabular}{|c|c|c|c|c|c|}
\hline 
 & Lunedì & Martedì & Mercoledì & Giovedì & Venerdì \\
\hline
8-9 & & & (8.30) P (CP) & & \\
\hline
9-10 & P (GD) & & P (CP) & & \\    
\hline
10-11 & P (GD) & D (FC) & P (CP) & & D (FC) \\
\hline
11-12 & & D (FC) & F, S, D (MS) & & P (GD), D (FC) \\  
\hline
12-13 & & D (FC) & F, S, D (MS) & & P (GD), D (FC) \\
\hline
13-14 & & & & & \\
\hline
14-15 & P (CP), F (PS) & & F (PS) & & F, S, D (MS) \\
\hline
15-16 & P (CP), F (PS) & & F (PS) & & F, S, D (MS) \\
\hline
16-17 & & D (RO) & & D (RO) & \\
\hline
17-18 & & D (RO) & & D (RO) & \\
\hline
\end{tabular}

\end{document}

我收到此错误

! Misplaced \noalign.
\hline ->\noalign 
                  {\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...

我已经搜索了好几天类似的问题,但没有一个能解决我的问题

答案1

只是为了好玩,让我们看看会发生什么(项目符号表示宏名中的空格)。

  1. \ensuremath扩展为\protect\ensuremath•
  2. \protect\relax这个上下文中,它消失了
  3. \ensuremath•扩展为\ifmmode\expandafter\@firstofone\else\expandafter \@ensuredmath\fi
  4. 由于我们不是数学模式,\expandafter\@ensuredmath\fi所以仍然
  5. \expandafter删除\fi\@ensuredmath保留

的定义\@ensuredmath

% latex.ltx, line 4666:
\long\def\@ensuredmath#1{$\relax#1$}

的参数是什么\@ensuredmath?后面没有括号,下一个标记是\begin,我们得到

$\relax\begin$

现在 LaTeX 可以顺利地运行,因为\$。接下来是一系列错误,但如果你跳过它们,你会看到 LaTeX 排版

在此处输入图片描述

其中 $ 符号清晰可见,由 生成\$\begin$没有tabular启动环境,因此\hline完全不合适(显示的错误确实是Misplaced \noalign,您可以通过简单的文档进行检查,例如

\documentclass{article}
\begin{document}
\hline
\end{document}

不,\ensuremath如果出现错误,添加Missing $ inserted通常是错误的做法。一般来说,\ensuremath不应该在环境中使用它document;它在命令定义中有用。

Missing $ inserted应该通过查看数学模式错误启动或未完成的位置来处理错误。

如果我删除错误的\ensuremath,则示例文档在编码为 Latin-1 时可以很好地编译。

如果我将其编码为 UTF-8,就会Missing $ inserted弹出错误。

解决方案:您的文档UTF-8 编码,因此更改\usepackage[latin1]{inputenc}

\usepackage[utf8]{inputenc}

(或者如果您使用的是最新的 TeX 发行版,则完全删除该调用)。

相关内容