如何自动将文件夹中的所有源代码文件(递归)转换为具有语法突出显示的单个 PDF?

Ben*_*ey4 30 linux html pdf printing

我想将几个项目的源代码转换为一个可打印的文件,以保存在 USB 上并在以后轻松打印出来。我怎样才能做到这一点?

编辑

首先,我想澄清一下,我只想打印非隐藏的文件和目录(因此没有.giteg 的内容)。

要获取当前目录中非隐藏目录中所有非隐藏文件列表,您可以运行该find . -type f ! -regex ".*/\..*" ! -name ".*"命令,如本线程中的答案所示

正如在同一线程中所建议的那样,我尝试使用该命令制作文件的 pdf 文件,find . -type f ! -regex ".*/\..*" ! -name ".*" ! -empty -print0 | xargs -0 a2ps -1 --delegate no -P pdf但不幸的是,生成的 pdf 文件一团糟

ter*_*don 48

我对你的问题很感兴趣,有点不知所措。此解决方案将生成一个漂亮的 PDF 文件,其中包含可点击的索引和颜色突出显示的代码。它将查找当前目录和子目录中的所有文件,并在 PDF 文件中为每个文件创建一个部分(请参阅下面的注释以了解如何使您的查找命令更加具体)。

它要求您安装以下内容(安装说明适用于基于 Debian 的系统,但这些应该在您的发行版存储库中可用):

安装这些后,使用此脚本创建包含源代码的 LaTeX 文档。诀窍是使用listings(的一部分texlive-latex-recommended)和color(安装的latex-xcolor)LaTeX 包。这\usepackage[..]{hyperref}就是使目录中的列表可点击链接的原因。

sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
Run Code Online (Sandbox Code Playgroud)

在包含源文件的目录中运行脚本

bash src2pdf
Run Code Online (Sandbox Code Playgroud)

这将创建一个all.pdf在当前目录中调用的文件。我用在我的系统上找到的几个随机源文件(特别是来自 源的两个文件)进行了尝试vlc-2.0.0,这是生成的 PDF 前两页的屏幕截图:

在此处输入图片说明


几点意见:

  • 如果您的源代码文件名包含空格,该脚本将不起作用。由于我们在谈论源代码,我假设他们没有。
  • 我加! -name "*~"了避免备份文件。
  • 我建议您使用更具体的find命令来查找您的文件,否则任何随机文件都将包含在 PDF 中。如果你的文件都有特定的扩展名(.c.h为例),则应更换find像这样的东西在脚本

    find . -name "*\.c" -o -name "\.h" | sed 's/^\..//' | 
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用listings options,您可以完全按照您的需要进行调整。