这里是main.tex
:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{comment}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}
\newtcbtheorem[]{myprob}{Problem}%
{colframe=blue!35!black,enlarge top by=0.15cm,fonttitle=\slshape,breakable}{prob}
\includecomment{analysis}
\includecomment{solution}
\usepackage{ana}
\title{Testing Doc}
\author{}
\date{}
\begin{document}
\maketitle
\begin{analysis}
\section{Analysis}
\subsection{Basic Integration}
\csname ANAsp2015p1\endcsname
\end{analysis}
\end{document}
和ana.sty
:
\ProvidesPackage{ana}[2021/08/11 Analysis Problems]
\expandafter\newcommand\csname ANAsp2015p1\endcsname{
\begin{myprob}{Spring 2015 Problem 1}{}
blah
\end{myprob}
\begin{solution}
Proof:
\end{solution}
}
Overleaf 告诉我“!扫描 \next 时文件结束”,以及“我怀疑您忘记了 '}',导致我读到了您希望我停止的地方”。如果我\begin{solution}...\end{solution}
从中删除以下内容ana.sty
:
\ProvidesPackage{ana}[2021/08/11 Analysis Problems]
\expandafter\newcommand\csname ANAsp2015p1\endcsname{
\begin{myprob}{Spring 2015 Problem 1}{}
blah
\end{myprob}
}
\begin{solution}...\end{solution}
代码运行正常。最初我以为这与我将注释环境嵌套在另一个注释环境中有关\begin{analysis}...\end{analysis}
,但在我删除\begin{analysis}
and之后错误仍然存在\end{analysis}
。有人知道发生了什么吗?
我看过注释包和宏定义但没有人解释为什么会发生这个错误。
答案1
我记得环境solution
希望通过查找来自\end{solution}
在 verbatim-catcode-régime 下对短语进行标记的标记来检测其结束。但是,在您的场景中,该短语未在 verbatim-catcode-régime 下进行标记,但在对 的定义进行标记时,它已在通常的 catcode-régime 下进行了标记\ANAsp2015p1
。
您可以通过让标记构成读取定义\ANAsp2015p1
并在 verbatim-catcode-régime 下进行标记并定义\ANAsp2015p1
将这些标记传递给\scantokens
重新标记来规避该问题。
以下示例提供了一个\DefineProbSolCmd
可执行这些操作的命令。与\verb
或verbatim
-environment 等类似,该命令\DefineProbSolCmd
只能在通过从 .tex-input-file 读取和标记来直接获取其参数的情况下使用。该命令\DefineProbSolCmd
不能用作宏参数的组成部分、宏的定义文本的组成部分或标记寄存器的内容的组成部分等。
\ProvidesPackage{ana}[2021/08/12 Analysis Problems]
\RequirePackage{xparse}
\NewDocumentCommand\DefineProbSolCmd{}{%
\begingroup
\catcode`\^^I=12\relax % Give "horizontal tab" catcode 12. See comment below for the reason.
\InnerDefineProbSolCmd
}%
\begingroup
\catcode`\^^A=14
\catcode`\%=12
\@firstofone{^^A
\endgroup
\NewDocumentCommand\InnerDefineProbSolCmd{m+v}{^^A
\endgroup
\expandafter\newcommand\csname#1\endcsname{\begingroup\newlinechar=\endlinechar\scantokens{\endgroup#2%}}^^A
}^^A
}%
% Reason for changing the catcode of horizontal tab:
% xparse's processor of v/+v-arguments leaves the catcode of
% "horizontal tab" at 10(space) so that tokenizing horizontal tabs
% yields space-tokens, which is undesired at this stage of
% processing.
%
\DefineProbSolCmd{ANAsp2015p1}{%
\begin{myprob}{Spring 2015 Problem 1}{}
blah
\end{myprob}
\begin{solution}
Proof:
\end{solution}
}%
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{comment}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}
\tcbuselibrary{breakable}
\newtcbtheorem[]{myprob}{Problem}%
{colframe=blue!35!black,enlarge top by=0.15cm,fonttitle=\slshape,breakable}{prob}
\includecomment{analysis}
\includecomment{solution}
\usepackage{ana}
\title{Testing Doc}
\author{}
\date{}
\begin{document}
\maketitle
\begin{analysis}
\section{Analysis}
\subsection{Basic Integration}
\csname ANAsp2015p1\endcsname
\end{analysis}
\end{document}
正在使用环境“解决方案”。如果我必须在课堂上布置作业,我绝不会制作一张漂亮的纸来记录解决方案。尽量减少解决方案落入课程参与者手中并被传阅的机会。在讨论解决方案时,我更喜欢板书,因为在黑板上书写可以调节信息传递的速度,从而更好地吸收信息。