\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
只是为了好玩,让我们看看会发生什么(项目符号表示宏名中的空格)。
\ensuremath
扩展为\protect\ensuremath•
\protect
在\relax
这个上下文中,它消失了\ensuremath•
扩展为\ifmmode\expandafter\@firstofone\else\expandafter \@ensuredmath\fi
- 由于我们不是数学模式,
\expandafter\@ensuredmath\fi
所以仍然 \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 发行版,则完全删除该调用)。