Asymptote 和 floatrow 兼容性

Asymptote 和 floatrow 兼容性

我正在尝试使用 float row 将两个浮点数放在一行中。使用以下结构,一切都运行良好:

\documentclass[12pt,letterpaper]{article}
\usepackage[inline]{asymptote}
\usepackage{floatrow,calc}
\begin{document}
\begin{figure}[!h]

   \floatsetup{heightadjust=object,valign=c}
   \begin{floatrow}
    \ffigbox{\caption{}\label{}}
            {}
    \ffigbox{\caption{}\label{}}
            {}         
    \end{floatrow}
\end{figure}
\begin{asy}
settings.outformat = "pdf";
settings.prc = false;  
settings.render = 0;  
import three;
size(5cm, 0);
currentprojection=orthographic((7,2,3));
real xmin=-1.5;
real xmax=4;
real ymin=-1.3;
real ymax=4;
path3 p=(xmin,ymin,0)--(xmin,ymax,0)--(xmax,ymax,0)--(xmax,ymin,0)--cycle;
draw(p);
\end{asy}
\end{document}`

这个 Asy 示例也可以正常工作,没有问题。但是!然后我将 asy 代码移到浮点数中,如下所示:

\documentclass[12pt,letterpaper]{article}
\usepackage[inline]{asymptote}
\usepackage{floatrow,calc}
\begin{document}
\begin{figure}[!h]
   \floatsetup{heightadjust=object,valign=c}
   \begin{floatrow}
    \ffigbox{\caption{}\label{}}
            {\begin{asy}
            settings.outformat = "pdf";
            settings.prc = false;  
            settings.render = 0;  
            import three;
            size(5cm, 0);
            currentprojection=orthographic((7,2,3));
            real xmin=-1.5;
            real xmax=4;
            real ymin=-1.3;
            real ymax=4;
            path3 p=(xmin,ymin,0)--(xmin,ymax,0)--(xmax,ymax,0)--(xmax,ymin,0)--cycle;
            draw(p);
            \end{asy}}
    \ffigbox{\caption{}\label{}}
            {\begin{asy}
            settings.outformat = "pdf";
            settings.prc = false;  
            settings.render = 0;  
            import three;
            size(5cm, 0);
            currentprojection=orthographic((7,2,3));
            real xmin=-1.5;
            real xmax=4;
            real ymin=-1.3;
            real ymax=4;
            path3 p=(xmin,ymin,0)--(xmin,ymax,0)--(xmax,ymax,0)--(xmax,ymin,0)--cycle;
            draw(p);
            \end{asy}}         
    \end{floatrow}
\end{figure}

\end{document}

它拒绝工作并说:

! \ProcessAsymptoteLine 的参数有一个额外的 }。\par l.22 \end{asy}}

我刚刚复制粘贴了可以运行的代码!为什么它不起作用?我发现的唯一原因可能是 Asymptote 和 floatrow 不兼容。当然还有我的愚钝。

为什么不工作?谢谢大家。

答案1

总结使用包裹subcaption代替floatrow


当您将类似逐字的环境asy放入命令中时,它们不起作用。

作品:

\begin{figure}
\begin{asy}
...asymptote code...
\end{asy}
\end{figure}

现在假设您更喜欢命令而不是环境。您可以尝试以下操作:

\newcommand{\figurecmd}[1]{\begin{figure}#1\end{figure}}  % BAD

% Doesn't work
\figurecmd{  
\begin{asy}
...asymptote code...
\end{asy}
}

简单解释:为了正确导出 Asymptote 代码,必须将\和的含义%(以及其他内容)更改为\begin{asy}\end{asy}不幸的是,在我给出的“糟糕”代码示例中,所有字符的含义在读取命令时都是固定的\figurecmd,因此它无法按预期工作。幸运的是,有替代方案,例如subcaption使用环境而不是命令的包,正是出于这种原因。

请注意,一些 TeX 专家能够施展某种魔法来创建在这方面表现得像环境的命令。例如,可以将环境放在asyTi 中Z\node命令。但对于大多数命令,您不应该期望这一点,这也是环境存在的主要原因。

相关内容