使用 attachmentfile 包设置 PDF 中嵌入文件的“文件名”

使用 attachmentfile 包设置 PDF 中嵌入文件的“文件名”

我正在使用 attachmentfile LaTeX 包(在 PDFLaTeX 中)将文件嵌入 PDF 中,并且遇到了一个困难,我怀疑这是嵌入文件的“文件名”。

我可以按以下方式附加/嵌入文件:

\textattachfile[author=Zapp Brannigan, color=0 0 0]{my_directory/my_file.dat}{\detokenize{my_file.dat}}

该文件似乎已成功嵌入到生成的 PDF 中并可访问,但在附加文件的链接上选择“将附件另存为...”时,Evince PDF 查看器建议的文件名如下:

my_directory/my_file.dat

因此,您可以看到,此“文件名”中包含了原始文件的路径。显然,当尝试使用此建议的文件名保存附件时会遇到困难。

我该如何将建议的文件名更改为诸如 my_file.dat 之类的名称?我已经进行了实验,并查阅了有关 attachmentfile 包的文档,但还是无法找到答案。

简单说明一下:我不愿意使用除 attachmentfile 之外的包,因为实际上我的代码比所示的更复杂;我包括了各种文件类型的自定义图标,这是 attachmentfile 包允许的。不过,我会保持开放的心态。

非常感谢您对此事的任何想法。

答案1

我还没有尝试让 TeX 自动为您解析文件名组件(但如果您有兴趣,我相信其他人可以帮您),但下面的代码修补了宏\textattachfile以要求一个额外的参数,即文件的名称,它应该出现在附件中,这与创建 PDF 时硬盘上的文件名称无关。也就是说,语法现在是\textattachfile[options]{physicalfilepath}{text}{virtualfilename}

\documentclass{article}
\usepackage{attachfile}
\makeatletter

\def\atfi@textattachfile@i#1#2#3#4{%
    \setkeys{AtFi}{#1}%
    \atfi@embedfile{#2}%
    \def\atfi@textcolor(##1 ##2 ##3)##4{%
      \textcolor[rgb]{##1,##2,##3}{##4}}%
    \atfi@set@appearance{%
      \expandafter\atfi@textcolor\expandafter
      (\atfi@color@rgb){#3\strut}}%
    \atfi@flags@to@int
    \atfi@insert@file@annot{\detokenize{#4}}%
  \endgroup
}
\makeatother

\begin{document}
% now have to pass an extra argument to \textattachfile, the filename you want the viewer to see (note that Adobe Reader appears to 'hide' the path component)
\textattachfile[author=Zapp Brannigan, color=0 0 0]{my_directory/my_file.dat}{\detokenize{my_file.dat}}{filename_seen_by_viewer.txt}
\end{document}

在您的情况下,您可能想要更改filename_seen_by_viewer.txtmy_file.dat,但我将其保留为这样以便更清楚地说明。

(只需 grep PDF 文件就my_directory足以表明它有效。)

答案2

此包的增强功能称为attachfile2,除其他功能外,还允许使用选项设置不同的名称ucfilespec。在这种情况下,您将删除文件夹部分。请参阅这个答案

相关内容