这电子表格包提供了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
是可选的)。
这显然不是一个令人满意的解决方案,我欢迎更合理的答案。