尝试输入渐近线文件

尝试输入渐近线文件

在使用 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

在此处输入图片描述

相关内容