渐近线标签弄乱了乳胶文档中的图像

渐近线标签弄乱了乳胶文档中的图像

我是 asymptote 的新手,使用它来创建几何图形。我正在从 asymptote 代码创建一个 eps 文件,并将其包含在 tex 文档中,而不是在 asy 环境中包含整个代码。

只要我不在点上使用标签,这种方法就没问题。一旦在点上使用标签,pdf 文件就乱了。图像完全向右移动。我也尝试使用 \centering。但没用。

示例 asy 文件在这里。

    import math;
    import geometry;
    import patterns;
    import settings;

    settings.outformat="eps";
    settings.render=0;
    settings.prc=false;
    unitsize(1cm);

    real r = 2.0;
    point o = (0,0);
    circle c = circle(o, r);
    point a = angpoint(c,0);
    point first=a;
    point last;
    draw(c);
    for(int i = 1; i<=6; ++i) {
      real ang = i*60;
      point p = angpoint(c, ang);
      draw(compassmark(a,p,0.5));
      dot(a);
      if (i==3){
        last=p;
      }
      draw(a--p);
      a=p;
    }

    draw(first--last);
    dot(a);
    dot(o);
//    label("$O$",o,N);

如果我取消注释标签语句,pdf 中的图像就会变得混乱。我遗漏了什么?

我的 tex 文件如下所示

\documentclass[12pt]{book}

\usepackage{graphicx}

\begin{document}
  \begin{figure}[htbp]
    \centering
      \includegraphics{test.eps}{\caption{}}
  \end{figure}
\end{document}

我正在使用 asymptote 2.35 和 lualatex。

答案1

问题是:

  1. 当 Asymptote 生成带有标签的 eps 图形时,它会调用 latex 来排版标签,然后调用 dvips 来生成 eps 文件。Asymptote 过去常常调用不带选项“-E”的 dvips,而且这种方法以前是可行的。但是随着 dvips 的更改,它会失败,因为 eps 文件中有一些无效的 setpagedevice 代码,包括 letter(或 A4)尺寸纸张的边界框值。因此,生成的 eps 文件有两条边界框线,而第一条是错误的。

  2. 当 lualatex 编译 tex 文件时,它会调用 epstopdf 自动将 eps 图形转换为 pdf 以供包含。epstopdf 不知何故使用了错误的边界框值并生成具有 letter(或 A4)页面大小的 pdf 图形。包含如此大的图形会导致“浮动太大”警告,而真正的图形对象会向右移动,因为其左侧是被视为图形一部分的空白区域。

因此,真正的解决方法是:

  1. 让 dvips 不生成这些边界框线,或者让 Asymptote 随后自动删除它们,从而生成仅具有正确边界框线的 eps 图形。该问题已固定的在 Asymptote 中通过使用 '-E' 调用 dvips。

  2. 使 epstopdf 更智能地检测正确的边界框,即使 eps 文件可能有错误的边界框线。这可能不会发生

在此之前,可能的解决方法是:

  1. 直接使用 pdf 图形。Asymptote 可以使用-f pdf选项生成 pdf 图形,lualatex/pdflatex 可以直接包含它们。

  2. 如果必须使用 eps 数据,请考虑

    1. 使用 asymptote 直接生成 pdf,然后使用pdftops将其转换回 eps。或者,
    2. 使用 asymptote 生成 eps 图,并使用文本编辑器编辑 eps 图以手动删除错误的边界框线。

相关内容