insdljs + xetex - 忽略换行符,破坏 JavaScript

insdljs + xetex - 忽略换行符,破坏 JavaScript

insdljs我正在尝试使用 JavaScript 在我的 PDF 文件中创建一些动态表单。我正在使用 xelatex 来编译它。包插入 JavaScript 的方式有些问题,导致它无法正常工作。

以下是示例文件:

\documentclass{article}
\usepackage[dvipdfm]{eforms}

\begin{insDLJS}{hello}{Hello, World}
var done=0;

function hello() 
{
    if (!done) {
        // check if we are done
        done=1;
        app.alert("Hello, World!");
    }
}

\end{insDLJS}

\OpenAction{/S /JavaScript /JS (hello();)}
\begin{document}
Hello,world!
\end{document}

如果你消除删除无用的注释并用 xelatex 编译,然后在 Acrobat Reader 中打开编译后的 PDF,您会收到“Hello, World!”警告。但是删除注释时不会收到任何警告。

查看插入 PDF 的实际 JavaScript(我认为你需要 Acrobat Pro 才能执行此操作),我发现所有换行符都被删除了。它变成

var done=0;function hello(){if (!done) {// check if we are done done=1;app.alert("Hello, World!");}}

在 JavaScript 中,双斜线//表示该行的其余部分是注释。当删除所有换行符时,一半的代码将被忽略!Acrobat 的 JavaScript 控制台会给出与此一致的错误消息(它找不到函数块的}结尾hello())。

以下是我的解决方法:

  1. 不使用注释。坏主意。
  2. 仅使用内联注释/* ... */ 还可以,但不是很好。
  3. 强制出现换行符。毕竟,除了注释之外,可能还有其他很好的理由需要使用换行符。

对于实施 #3 有什么想法吗?电子表格手册说你可以用 插入换行符\n,但这似乎没有发生。如果我这样做,我会得到

var done=0;function hello(){if (!done) {// check if we are done \ndone=1;app.alert("Hello, World!");}}

\n直接进入文档级 JavaScript)。

答案1

如果添加 TeX 注释则有效:

    %// check if we are done

但是从文档中我预计 // 也可以起作用,所以我建议您写信给作者。

相关内容