在insDLJS环境中输入JS文件

在insDLJS环境中输入JS文件

电子表格包提供了insDLJS将文档级 JavaScript 插入 PDF 文件的环境。将 JavaScript 放入其自己的文件中并使用以下方式输入会很方便(包括代码重用和语法突出显示等),例如,

\begin{insDLJS}{macros}{}
\input{macros.js}
\end{insDLJS}

但这只是将字符串插入\input{macros.js}.djs 文件,并出现错误。

我也可以把\begin\end行放入macros.js,但该文件不再是有效的 JavaScript(例如,不能在网页中重复使用)。

有没有办法在insDLJS环境中插入文件的内容?

答案1

使用 pdfTeX 内置命令可以轻松完成此操作:

\documentclass{article}

%just to create some example external JavaScript file
\begin{filecontents*}{macros.js}
  app.alert("hello world!");
\end{filecontents*}

% create PDF object from file content
\immediate\pdfobj stream file {macros.js} 

%create JavaScript action
\immediate\pdfobj{ <</S/JavaScript /JS \the\pdflastobj\space 0 R>> } 

%register JavaScript action for execution when the document is opened
\pdfnames{ /JavaScript << /Names [(someDocLevelJS) \the\pdflastobj\space 0 R ] >> }

\begin{document}
text
\end{document}

还可以包含多个 JS 文件;没有上限。只需在数组中注册相关的 JavaScript 操作即可/Names

\documentclass{article}

%just to create some example external JavaScript files
\begin{filecontents*}{macrosA.js}
  app.alert("hello world!");
\end{filecontents*}

\begin{filecontents*}{macrosB.js}
  app.alert("here comes the sun.");
\end{filecontents*}

% create PDF object from file content
\immediate\pdfobj stream file {macrosA.js}

%create JavaScript action
\immediate\pdfobj{ <</S/JavaScript /JS \the\pdflastobj\space 0 R>> }
\edef\actionA{\the\pdflastobj\space 0 R}

% create PDF object from file content
\immediate\pdfobj stream file {macrosB.js}

%create JavaScript action
\immediate\pdfobj{ <</S/JavaScript /JS \the\pdflastobj\space 0 R>> }
\edef\actionB{\the\pdflastobj\space 0 R}

%register JavaScript actions for execution when the document is opened
\pdfnames{ /JavaScript << /Names [ (someDocLevelJS) \actionA \space (otherDocLevelJS) \actionB ] >> }

\begin{document}
text
\end{document}

答案2

看过之后这个问题为了获得灵感,我想出了一个窍门:

添加线条

$=0;/*
\begin{insDLJS}{form}{}%*/

//\end{insDLJS}

在 .js 文件的开始和结束处,并使用以下命令导入它:

\catcode`\$=14
\input{Plan_mark_sheet.js}
\catcode`\$=3

第一个\catcode命令使 LaTeX 将其解释$为开始单行注释,因此忽略 .js 文件中的第一行。在 JavaScript 中,第一行只是定义一个新变量,该变量从未使用过($是有效的变量名,并且var是可选的)。

这显然不是一个令人满意的解决方案,我欢迎更合理的答案。

相关内容