在使用 Asymptote(似乎是一个很棒的工具)的第一步时,我遇到了以下问题。我通常会尝试将我的图形(tikz)放入单独的文件中,以提高灵活性。所以我也想处理 asy-graphics。但是,宏\ASYinput
会导致错误消息! File ended while scanning use of \next
。有什么(简单的)方法可以运行它吗?
\documentclass{scrartcl}
\usepackage{asymptote}
\newcommand{\ASYinput}[1]{%
\begin{asy}
\input{#1.asy}
\end{asy}
}
\newcommand{\ASYinputx}[1]{%
\input{#1.asy}
}
\begin{document}
blabla
\ASYinputx{test1}
blabla
\ASYinput{test2}
blabla
\end{document}
这是两个测试文件。
// test2.asy
size(10cm);
draw((0,0)--(2,1));
和
// test1.asy
\begin{asy}
size(10cm);
draw((0,0)--(2,1));
\end{asy}
答案1
来自该包的文档asymptote
:
如果您在单独的文件中有 Asymptote 代码,则可以将其包含在命令中
\asyinclude[options]{filename}
。
答案2
正如所指出的这个答案,您不能在环境\input
内使用 TeX 命令 ( ) asy
;您必须使用asymptote
命令include
。
此外,正如另一个答案,您无法asy
在宏中隐藏环境(但是,当然,egreg 找到了解决方案)。
综合以上内容,得到以下有效代码:
\documentclass{scrartcl}
\usepackage{asymptote}
\makeatletter
\newcommand{\asycode}[2][]{%
\stepcounter{asy}%
\setkeys{ASYkeys}{#1}%
\ifASYattach
\ASYinlinefalse
\fi
\ifx\asydir\empty\else
\def\ASYprefix{\asydir/}%
\fi
\immediate\write\AsyPreStream{%
\noexpand\InputIfFileExists{%
\ASYprefix\noexpand\jobname-\the\[email protected]}{}{}%
}
\asy@write@graphic@header
\immediate\write\AsyStream{\detokenize{#2}}% here asy does the writing
\asy@finalise@stream
\asy@input@graphic
}
\makeatother
\newcommand{\ASYinput}[1]{%
\asycode{include #1;}
}
\newcommand{\ASYinputx}[1]{%
\input{#1.asy}
}
\begin{document}
blabla
\ASYinputx{test1}
blabla
\ASYinput{test2}
blabla
\end{document}
和test1.asy
:
\begin{asy}
size(10cm);
draw((0,0)--(2,1));
\end{asy}
和test2.asy
:
size(10cm);
draw((0,0)--(2,1));
在这种情况下,您不能使用,filecontents
因为它会在文件的末尾添加一个空行,而这是 不接受的asymptote
。
如果你需要建议,使用tikz
!