有人成功通过 PDF 链接打开某一行的文本文件吗?

有人成功通过 PDF 链接打开某一行的文本文件吗?

在我试图澄清一些尚无定论的话题和“有人成功了吗”系列的一部分时(例如有人在 Linux 中成功播放 Acrobat 中嵌入的电影吗?),下面是一个新问题:

是否有人在任何系统(例如 GNU/Linux)中使用 PDF 查看器和编辑器的特定组合,成功创建并打开 PDF 中的链接,从而打开文本文件在某一行

您使用了哪些编辑器(例如 gedit、emacs、vim)和查看器(例如 evince、acrobat)以及设置(例如 acrobat 中的安全设置)的具体组合?

我当前的策略是使用命令

\href{run:textfile.txt}{Link to text file (line 20)}

当然,这不会将光标带到正确的行,我必须手动搜索该行。(确认后,它在 Evince 和 Acrobat 中都会执行此操作)。

问题是,如何做同样的事情,但打开文本中的某一行。我失败的尝试是

\href{run:/usr/bin/gedit +20 textfile.txt}{Link to text file (line 20)}

尝试利用允许在某一行打开文件的命令行选项。事实上,这根本行不通,因为它不被识别为命令行(在 evince 中,"Error when getting information for file '/usr/bin/gedit +20 textfile.txt': No such file or directory."在 acrobat 中:"Could not open the file '/usr/bin/gedit +20 textfile.txt'"

我甚至想过劫持某些查看器/编辑器的“反向搜索”功能,使其从 PDF 中的某个位置链接回任意行或文件),但我不知道从哪里开始(现在,我不关心解决方案的代码有多复杂,只要它能与现有的查看器和编辑器一起使用就行)

(为了说明,我在 GNU/Linux 中使用 Acrobat 9.4.1、Evince 3.8.3 和 gedit 3.8.3)

(之前的一些不确定的答案:https://tex.stackexchange.com/a/2982/1871https://tex.stackexchange.com/a/123982/1871

编辑:澄清:我不想链接到 TeX 源,而是想链接到任意文本文件。

编辑2:经过一番研究,我发现,原则上,Javascript 可以执行外部程序(可能在禁用某些安全墙之后),并且 Javascript 可以嵌入到 PDF 中。这可能是答案吗?(至少对于 Acrobat Viewer 来说)

答案1

要从 PDF 编辑器启动具有特定选项的不相关文本文件,可能需要间接地执行此操作。

  1. 创建一个脚本来启动您想要的所有内容(例如包含gedit +42 file.txt)。根据查看器,file.txt可能需要绝对路径。
  2. 从 TeX 链接到该脚本(例如使用href
  3. 脚本扩展名(例如.sh.mygeditrungeditfromline42.shrungeditfromline42.mygedit)必须属于可执行 MIME 类型。

根据查看器,需要设置以下一项(或两项):

  1. ( Evince, Acroread) 扩展必须与某种类型的脚本执行相关联。我找到的一种方法如下(用 Bash 替换 Java):https://ask.fedoraproject.org/en/question/9735/how-do-i-launch-jar-files-using-nautilus/?answer=15275#post-id-15275(我不知道有没有自动的方法可以做到这一点)。
  2. xpdf)使脚本可执行chmod +x rungeditfromline42.sh
  3. (尚无解决方案Okular

所有这些都acroread知道如何处理(在其他情况下,将被视为任何普通文本)。我还注意到,出于某种原因,evince需要完整路径(在脚本内)。

我在 Fedora 20 中测试了这个问题。http://latex-beamer-class.10966.n7.nabble.com/run-a-shell-script-from-a-beamer-generated-pdf-td2049.html。但我认为这些说明并不完整。


编辑2015:如何使脚本扩展与某种类型的脚本执行相关联?(上述第 4 点)

(如果不采取此步骤,Acrobat 或 Evince 可能会打开脚本文件但不执行该脚本)

创建~/.local/share/applications/一个名为run-gedit.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application

Exec=bash %f
Icon=icon

Name=run-gedit
Comment=Run the gedit file

右键nautilus单击rungeditfromline42.mygedit文件(参见上文)并单击“打开方式”选项卡,向下滚动直到找到“run-gedit”,然后单击它并“设置为默认值”。转到 Evince,单击链接以测试脚本是否运行。


关于SyncTeX

自 2008 年起,可以使用SyncTeX它来实现源文件和 PDF 文件之间的同步。

为了实现同步,SyncTeX 创建了一个格式的辅助文件filename.synctex.gz

一些 LaTeX 编辑器默认使用 SyncTeX。您根本不需要更改源.tex文件。例如,TeXWorks您只需要在 PDF 查看器中单击鼠标右键即可打开菜单,然后选择转到源代码(转到与 PDF 查看器中实际单击的行相对应的行),然后在文本编辑器中执行相同的过程,您就可以返回 PDF 查看器(显示您实际正在编辑的页面)。

答案2

这不是答案,而是我进行的一些研究的结果。我分享这些结果,希望有人参与其中hyperref并/或pdflatex可以利用它们做点什么。

简单文件的结果

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}

\begin{document}
  \href{run:file.txt}{test}
\end{document}

可以使用qpdf --qpdf in.pdf out.pdf任何文本编辑器进行检查。代表链接的注释如下:

/A <<
  /F (file.txt)
  /S /Launch
>>

现在,/F仅指定文件,因此除了Fran 的方法。这与我收到的错误消息一致:查看器尝试打开具有给定名称的文件,包括参数等。我猜查看器可以尝试将传递的文件名解释为 shell 命令,但是很好。

然而,调查PDF 规范发射行动(第 659 页)揭示:

可选的 Win、Mac 和 Unix 条目允许操作字典包含用于启动指定应用程序的平台特定参数。如果给定平台没有此类条目,则使用 F 条目。表 8.54 显示了 Windows 平台的特定平台启动参数。在发布时,Mac OS 和 UNIX 平台的参数尚未定义。

因此,据我了解,

/A <<
  /Win <<
    /F (editor)
    /P (+20 file.txt)
  >>
  /S /Launch
>>

应该现在可以在 Windows 下工作,还有类似的东西可能有一天能在其他操作系统下工作。

相关内容