LaTeX 错误:毫无理由地缺少 \begin{document}

LaTeX 错误:毫无理由地缺少 \begin{document}

我在编译代码(基于 xelatex)时出现以下错误。请帮助我。

  1. 软件包 pgfkeys 错误:我不知道密钥“/tcb/library/skins”

  2. 未定义控制序列。\tcolorboxenvironment

  3. LaTeX 错误:缺少 \begin{document}

  4. LaTeX 错误:环境审阅者评论未定义

  5. LaTeX 错误:\begin{response} 在输入第 55 行以 \end{reviewer-comment} 结束

‎\documentclass[10pt]{article}‎

% Allow Unicode input (alternatively, you can use XeLaTeX or LuaLaTeX)
% ‎\usepackage[utf8]{inputenc}‎
\usepackage{microtype, xparse, tcolorbox}‎
\newenvironment{reviewer-comment}{}{}‎
\tcbuselibrary{skins}‎‎‎

\tcolorboxenvironment{reviewer-comment}{empty‎, ‎left=1em‎, ‎top=1ex‎, 
‎bottom=1ex‎, ‎borderline west={2pt}{0pt}{black!20}‎,}
‎\ExplSyntaxOn‎
‎\NewDocumentEnvironment{response}‎{‎+‎m O{black!20}‎}{
\IfValueT{#1}‎{
\begin{reviewer-comment~}‎
\setlength\parindent{2em}‎
\noindent‎
‎\ttfamily #1‎
‎\end{reviewer-comment~}‎
}
\par\noindent\ignorespaces‎‎
}{‎\bigskip\par‎}

‎\NewDocumentCommand \Reviewer {m}‎ {
\section*{Comments~by~Reviewer~#1}‎
}
\ExplSyntaxOff‎
\AtBeginDocument{\maketitle\thispagestyle{empty}\noindent}‎

% ‎You can get probably get rid of these definitions‎:
\newcommand\meta[1]{$\langle\hbox{#1}\rangle$}‎
\newcommand\PaperTitle[1]{``\textit{#1}''}‎

\title{Statement on the Revision of \meta{Paper ID} \\‎
Based on the Referees' Report}‎
\author{Author1 \and Author2 \and Author3}‎
\date{\today}‎


‎\begin{document}‎
‎This statement concerns our revision of the \meta{Paper ID} paper‎,
‎entitled \PaperTitle{\meta{Paper Title}}‎, ‎based on the referees'‎
‎report‎.

\Reviewer{\#1}‎
\begin{response}{First comment.}‎
Response to the first comment‎.
‎\end{response}‎
\begin{response}{Second comment.}‎
Response to the second comment‎.
‎\end{response}‎

‎\Reviewer{\#2}‎
‎\begin{response}{First comment.}‎
‎Response to the first comment‎.
‎\end{response}‎‎

‎\end{document}‎

答案1

正确答案:

这里有几件事在起作用。首先,MWE 包含大约 60 多个不可见的 unicode 字符(U+200E,从左到右标记)。使用 pdflatex 编译 MWE 会导致 pdflatex 无法识别 unicode 200E 的错误。

在 xelatex 中情况有所不同,它了解 unicode,并且对它来说这些不可见的字符只是普通字符。

在 MWE 的第一行中,行末有一个 U+200E。Xelatex 将尝试排版此字符,但由于我们在序言中,因此不允许这样做,因此

LaTeX Error: Missing \begin{document}

使用以下方法会得到同样的错误\documentclass{article} a

其他错误消息可能是由您的编辑器在类似nonstopmodeaka 的环境中运行而导致的,如果出现错误,请尝试恢复,但这种猜测并不总是那么顺利,错误可能会累积。因此,人们总是专注于修复第一个错误。

在下面的早期文本中,您会发现我在文档中标记了 200E 字符的隐藏位置。

这是一个清理过的版本:

\documentclass[10pt]{article}

% Allow Unicode input (alternatively, you can use XeLaTeX or LuaLaTeX)
% \usepackage[utf8]{inputenc}
\usepackage{microtype, xparse, tcolorbox}
\newenvironment{reviewer-comment}{}{}
\tcbuselibrary{skins}

\tcolorboxenvironment{reviewer-comment}{empty, left=1em, top=1ex, 
bottom=1ex, borderline west={2pt}{0pt}{black!20},}
\ExplSyntaxOn
\NewDocumentEnvironment{response}{+m O{black!20}}{
\IfValueT{#1}{
\begin{reviewer-comment~}
\setlength\parindent{2em}
\noindent
\ttfamily #1
\end{reviewer-comment~}
}
\par\noindent\ignorespaces
}{\bigskip\par}

\NewDocumentCommand \Reviewer {m} {
\section*{Comments~by~Reviewer~#1}
}
\ExplSyntaxOff
\AtBeginDocument{\maketitle\thispagestyle{empty}\noindent}

% You can get probably get rid of these definitions:
\newcommand\meta[1]{$\langle\hbox{#1}\rangle$}
\newcommand\PaperTitle[1]{``\textit{#1}''}

\title{Statement on the Revision of \meta{Paper ID} \\
Based on the Referees' Report}
\author{Author1 \and Author2 \and Author3}
\date{\today}


\begin{document}
This statement concerns our revision of the \meta{Paper ID} paper,
entitled \PaperTitle{\meta{Paper Title}}, based on the referees'
report.

\Reviewer{\#1}
\begin{response}{First comment.}
Response to the first comment.
\end{response}
\begin{response}{Second comment.}
Response to the second comment.
\end{response}

\Reviewer{\#2}
\begin{response}{First comment.}
Response to the first comment.
\end{response}

\end{document}

通过 xelatex 运行,我们得到错误

! LaTeX Error: Environment reviewer-comment  undefined.

这是由于将 env 定义为reviewer-comment~注意末尾的波浪号而导致的。char 下\ExplSyntaxOn~一个显式空格。因此reviewer-comment未定义,而reviewer-comment(末尾的空格)已定义。

只要删除这两个~就可以正常工作。

顺便说一句,您没有使用任何需要手册\ExplSyntaxOn中解释的接口的代码xparse,不需要它。


先前的文字:


太长了,无法发表评论,这是我通过“查找 pdfLaTeX 不支持的 unicode 字符”运行 MWE 后的样子,\NOPE只标记了字符的位置和数量。所有这些\NOPE{200e}都使 pdflatex 崩溃。我不知道您的书写环境出了什么问题,因为它添加了所有那些原本隐藏的字符。

看来 pdflatex 在抱怨 unicode 问题方面比 xelatex 要好得多。

您可以将 MWE 复制到https://w3c.github.io/xml-entities/unicode-names.html,看看它是由什么字符组成的。

你到处U+200e LEFT-TO-RIGHT MARK ‎都是。这些是不可见的,但在 xelatex 和 lualatex 的序言中被算作字符,所以你会得到一个错误。

顺便说一句,如果我从 MWE 中删除 200E 个字符,并删除~in \begin/end{reviewer-comment~}‎,那么 MWE 就可以在 pdflatex 和 xelatex 中很好地编译(在 TeX Live 2018 下测试)

\documentclass[10pt]{article}\NOPE{200e}

% Allow Unicode input (alternatively, you can use XeLaTeX or LuaLaTeX)
% \NOPE{200e}\usepackage[utf8]{inputenc}\NOPE{200e}
\usepackage{microtype, xparse, tcolorbox}\NOPE{200e}
\newenvironment{reviewer-comment}{}{}\NOPE{200e}
\tcbuselibrary{skins}\NOPE{200e}\NOPE{200e}\NOPE{200e}

\tcolorboxenvironment{reviewer-comment}{empty\NOPE{200e}, \NOPE{200e}left=1em\NOPE{200e}, \NOPE{200e}top=1ex\NOPE{200e}, 
\NOPE{200e}bottom=1ex\NOPE{200e}, \NOPE{200e}borderline west={2pt}{0pt}{black!20}\NOPE{200e},}
\NOPE{200e}\ExplSyntaxOn\NOPE{200e}
\NOPE{200e}\NewDocumentEnvironment{response}\NOPE{200e}{\NOPE{200e}+\NOPE{200e}m O{black!20}\NOPE{200e}}{
\IfValueT{#1}\NOPE{200e}{
\begin{reviewer-comment~}\NOPE{200e}
\setlength\parindent{2em}\NOPE{200e}
\noindent\NOPE{200e}
\NOPE{200e}\ttfamily #1\NOPE{200e}
\NOPE{200e}\end{reviewer-comment~}\NOPE{200e}
}
\par\noindent\ignorespaces\NOPE{200e}\NOPE{200e}
}{\NOPE{200e}\bigskip\par\NOPE{200e}}

\NOPE{200e}\NewDocumentCommand \Reviewer {m}\NOPE{200e} {
\section*{Comments~by~Reviewer~#1}\NOPE{200e}
}
\ExplSyntaxOff\NOPE{200e}
\AtBeginDocument{\maketitle\thispagestyle{empty}\noindent}\NOPE{200e}

% \NOPE{200e}You can get probably get rid of these definitions\NOPE{200e}:
\newcommand\meta[1]{$\langle\hbox{#1}\rangle$}\NOPE{200e}
\newcommand\PaperTitle[1]{``\textit{#1}''}\NOPE{200e}

\title{Statement on the Revision of \meta{Paper ID} \\NOPE{200e}
Based on the Referees' Report}\NOPE{200e}
\author{Author1 \and Author2 \and Author3}\NOPE{200e}
\date{\today}\NOPE{200e}


\NOPE{200e}\begin{document}\NOPE{200e}
\NOPE{200e}This statement concerns our revision of the \meta{Paper ID} paper\NOPE{200e},
\NOPE{200e}entitled \PaperTitle{\meta{Paper Title}}\NOPE{200e}, \NOPE{200e}based on the referees'\NOPE{200e}
\NOPE{200e}report\NOPE{200e}.

\Reviewer{\#1}\NOPE{200e}
\begin{response}{First comment.}\NOPE{200e}
Response to the first comment\NOPE{200e}.
\NOPE{200e}\end{response}\NOPE{200e}
\begin{response}{Second comment.}\NOPE{200e}
Response to the second comment\NOPE{200e}.
\NOPE{200e}\end{response}\NOPE{200e}

\NOPE{200e}\Reviewer{\#2}\NOPE{200e}
\NOPE{200e}\begin{response}{First comment.}\NOPE{200e}
\NOPE{200e}Response to the first comment\NOPE{200e}.
\NOPE{200e}\end{response}\NOPE{200e}\NOPE{200e}

\NOPE{200e}\end{document}

编辑:这是 MEW,清除了所有的 U+200E,通过 pdflatex 或 xelatex 运行它,错误完全不同,与~定义中的有关reviewer-comment~

\documentclass[10pt]{article}

% Allow Unicode input (alternatively, you can use XeLaTeX or LuaLaTeX)
% \usepackage[utf8]{inputenc}
\usepackage{microtype, xparse, tcolorbox}
\newenvironment{reviewer-comment}{}{}
\tcbuselibrary{skins}

\tcolorboxenvironment{reviewer-comment}{empty, left=1em, top=1ex, 
bottom=1ex, borderline west={2pt}{0pt}{black!20},}
\ExplSyntaxOn
\NewDocumentEnvironment{response}{+m O{black!20}}{
\IfValueT{#1}{
\begin{reviewer-comment~}
\setlength\parindent{2em}
\noindent
\ttfamily #1
\end{reviewer-comment~}
}
\par\noindent\ignorespaces
}{\bigskip\par}

\NewDocumentCommand \Reviewer {m} {
\section*{Comments~by~Reviewer~#1}
}
\ExplSyntaxOff
\AtBeginDocument{\maketitle\thispagestyle{empty}\noindent}

% You can get probably get rid of these definitions:
\newcommand\meta[1]{$\langle\hbox{#1}\rangle$}
\newcommand\PaperTitle[1]{``\textit{#1}''}

\title{Statement on the Revision of \meta{Paper ID} \\
Based on the Referees' Report}
\author{Author1 \and Author2 \and Author3}
\date{\today}


\begin{document}
This statement concerns our revision of the \meta{Paper ID} paper,
entitled \PaperTitle{\meta{Paper Title}}, based on the referees'
report.

\Reviewer{\#1}
\begin{response}{First comment.}
Response to the first comment.
\end{response}
\begin{response}{Second comment.}
Response to the second comment.
\end{response}

\Reviewer{\#2}
\begin{response}{First comment.}
Response to the first comment.
\end{response}

\end{document}

文档中出现的 U+200E 错误与您输入以下内容时出现的错误有关

\documentclass{article} a

该单曲a将导致如下错误

LaTeX Error: Missing \begin{document}.

当您尝试在序言中排版某些内容时,pdflatex 将 U+200E 视为未定义的字符并发出抱怨。xelatex 和 lualatex 知道 unicode 并且只是将其视为与a序言中的排版相关的字符(如)。

其他错误消息可能是由于编辑器使用的运行模式(忽略错误)而产生的。

相关内容