我在编译代码(基于 xelatex)时出现以下错误。请帮助我。
软件包 pgfkeys 错误:我不知道密钥“/tcb/library/skins”
未定义控制序列。\tcolorboxenvironment
LaTeX 错误:缺少 \begin{document}
LaTeX 错误:环境审阅者评论未定义
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
其他错误消息可能是由您的编辑器在类似nonstopmode
aka 的环境中运行而导致的,如果出现错误,请尝试恢复,但这种猜测并不总是那么顺利,错误可能会累积。因此,人们总是专注于修复第一个错误。
在下面的早期文本中,您会发现我在文档中标记了 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
序言中的排版相关的字符(如)。
其他错误消息可能是由于编辑器使用的运行模式(忽略错误)而产生的。