我正在尝试创建一个环境,该环境本质上是中心化的,并根据图表的代码创建一个渐近线图。这是一个最小的工作示例:
\documentclass{article}
\usepackage{asymptote}
\newenvironment{diagram}{\begin{center}\begin{asy}}{\end{asy}\end{center}}
\begin{document}
\begin{diagram}
draw((0, 0) -- (1, 1));
\end{diagram}
\end{document}
上面的代码给出了Runaway argument? File ended while scanning use of \next
错误。这似乎也是 Asymptote 特有的错误;如果我用其他东西替换\begin{asy}
和\end{asy}
,它就可以正常工作。这类似于这问题,但按照那里的答案却不起作用。有解决方法吗?
答案1
该asy
环境属于逐字环境,因此要求文字字符串\end{asy}
出现在环境末尾。由于您将其隐藏在里面,因此diagram
它找不到\end
并扫描文件中太远的地方,最终到达其末尾,然后您会收到文件已结束的错误:
Runaway argument?
! File ended while scanning use of \next.
<inserted text>
\par
<*> test.tex
?
asy
幸运的是,将寻找的结束环境的字符串更改为您自己的环境的字符串相当容易。这里有一个补丁,它定义了\asyenv{<name>}
,这样\begin{asy}
就会寻找\end{<name>}
结束逐字环境。对于您的情况,您必须说\asyenv{diagram}
:
\documentclass{article}
\usepackage{asymptote}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\asy
{\ProcessAsymptote{asy}}
{\expandafter\ProcessAsymptote\expandafter{\asy@outer@env}}
{}{\errmessage{Failed to patch asy}}
\def\asyenv#1{\def\asy@outer@env{#1}}%
\newenvironment{diagram}{%
\begin{center}%
\asyenv{diagram}%
\begin{asy}%
}{%
\end{asy}\end{center}%
}
\begin{document}
\begin{diagram}
draw((0, 0) -- (1, 1));
\end{diagram}
\end{document}