![使用纯 TeX(pdfTeX)附加文件](https://linux22.com/image/300063/%E4%BD%BF%E7%94%A8%E7%BA%AF%20TeX%EF%BC%88pdfTeX%EF%BC%89%E9%99%84%E5%8A%A0%E6%96%87%E4%BB%B6.png)
我目前正在使用纯 TeX 编写文档,并希望能够将其他相关文件附加到生成的 pdf 中。我过去曾使用过 attachmentfile、attachfile2 和 embedfile 包(成功)来实现此目的(在 LaTeX 中)。
虽然我可以恢复使用 LaTeX,但我更愿意定义一个适合在纯 TeX 中使用的宏。我已经阅读了 pdf 规范的相关部分以及 pdfTeX 用户手册,但我尚未能够创建实现此目的的宏。
我将非常感激任何想法和/或帮助。
编辑1:参考文献
相关参考文献链接如下:
Adobe PDF 参考文档(目前可从http://www.adobe.com/devnet/pdf/pdf_reference.html
pdfTeX 用户手册(目前可从http://ctan.org/pkg/pdftex
attachmentfile2 软件包文档(目前可从http://ctan.org/pkg/attachfile2。以供成功实施参考(pdfLaTeX)。
embedfile 包文档(目前可从http://www.ctan.org/pkg/embedfile
编辑2:当前的解决方案
系统信息:
- Fedora 20
- pdfTeX 3.1415926
请参阅下面的最小工作示例代码以及我当前仅使用纯 TeX 和 pdfTeX 原语的方法。
文件:字母表.txt
这是要附加到文档的文件。
abcdefghijklmnopqrstuvwxyz
文件:最小.tex
该文件利用 attachmentfile2 包来演示如何使用 LaTeX (pdfLaTeX) 实现这一点。
\pdfcompresslevel=0
\documentclass{report}
\usepackage{attachfile2}
\begin{document}
Hello, world!
\textattachfile{alphabet.txt}{some annotation}
\end{document}
文件:测试.tex
\pdfcompresslevel=0
\catcode`@=11
\def\res@space{ }
\newcount\res@count@obj@file
\newcount\res@count@obj@xform
\newcount\res@count@obj@fspec
\newdimen\res@box@dp
\newdimen\res@box@ht
\newdimen\res@box@wd
\def\res@embefile#1{%
\immediate\pdfobj stream attr{%
/Type /EmbeddedFile
/Params <<
/Size \pdffilesize{#1}
/ModDate (\pdffilemoddate{#1})
/CheckSum <\pdfmdfivesum file {#1}>
>>
} file {#1}
\res@count@obj@file=\the\pdflastobj
}
\def\res@appearance@box#1{%
\setbox1=\hbox{#1}
\immediate\pdfxform 1
\res@count@obj@xform=\the\pdflastxform
\res@box@dp=\the\dp1
\res@box@ht=\the\ht1
\res@box@wd=\the\wd1
}
\def\res@filespec#1{%
\immediate\pdfobj{
<<
/Type /Filespec
/FS (#1)
/EF <<
/F \the\res@count@obj@file\res@space 0 R
>>
>>
}
\res@count@obj@fspec=\the\pdflastobj
}
\def\res@annot{
\pdfannot width \the\res@box@wd
height \the\res@box@ht
depth \the\res@box@dp {
/Subtype /FileAttachment
/AP <<
/N \the\res@count@obj@xform\res@space 0 R
/R \the\res@count@obj@xform\res@space 0 R
/D \the\res@count@obj@xform\res@space 0 R
>>
/F \the\res@count@obj@file
/FS \the\res@count@obj@fspec\res@space 0 R
}
}
\def\res@attachfile#1#2{% Arg 1: Annotation
% Arg 2: Name of file to be attached
\res@embedfile{#2}
\res@filespec{#2}
\res@appearance@box{#1}
\res@annot
}
Hello, world!
\res@attachfile{some annotation}{alphabet.txt}
\bye
前提是字母表.txt存储在同一目录中,可以通过运行以下命令产生所需的输出:
pdflatex minimal.tex
我目前的方法能够产生.pdf可以使用文档查看器查看的文件(我尚未检查它是否能够被 Adobe Reader 打开)。.pdf可以通过运行来生成:
pdftex test.tex
通过比较两种方法的输出,似乎附件已正确嵌入。但是,我无法“看到”pdf 上的注释,也无法打开附件。
如果有人能帮我找出错误我将非常感激。
答案1
这navigator
软件包允许访问 Plain TeX、LaTeX 和 ConteXt 中的链接、附件和其他 PDF 功能。如果您添加
\input navigator
你的序言和
\finishpdffile
到文档末尾,你可以使用
\embeddedfile[<description>]{<object name>}[<alternate file name>]{<file>}
其中<description>
是 PDF 查看器中列出的描述,<object name>
是附件的内部名称,<alternate file name>
是 PDF 查看器中列出的文件名,<file>
当然,是您想要附加的文件。