我对你的问题很感兴趣,并被带走了。该解决方案将生成一个具有可点击索引和高亮显示颜色的代码的漂亮PDF文件。它将在当前目录和子目录中找到所有文件,并在每个文件的PDF文件中创建一个部分(有关如何使find命令更具体的信息,请参见下面的注释)。
它要求您已经安装了以下软件(安装说明适用于基于Debian的系统,但是在发行版的存储库中应该可用):
安装这些文件后,使用此脚本用您的源代码创建一个LaTeX文档。诀窍是使用LaTeX软件包的listings
(的一部分texlive-latex-recommended
)和color
(由latex-xcolor
)安装。这\usepackage[..]{hyperref}
就是使目录中的列表可单击的链接的原因。
#!/usr/bin/env bash
tex_file=$(mktemp) ## Random temp file name
cat<<EOF >$tex_file ## Print the tex file header
\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color} %% Allow color names
\lstdefinestyle{customasm}{
belowcaptionskip=1\baselineskip,
xleftmargin=\parindent,
language=C++, %% Change this to whatever you write in
breaklines=true, %% Wrap long lines
basicstyle=\footnotesize\ttfamily,
commentstyle=\itshape\color{Gray},
stringstyle=\color{Black},
keywordstyle=\bfseries\color{OliveGreen},
identifierstyle=\color{blue},
xleftmargin=-8em,
}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\begin{document}
\tableofcontents
EOF
find . -type f ! -regex ".*/\..*" ! -name ".*" ! -name "*~" ! -name 'src2pdf'|
sed 's/^\..//' | ## Change ./foo/bar.src to foo/bar.src
while read i; do ## Loop through each file
name=${i//_/\\_} ## escape underscores
echo "\newpage" >> $tex_file ## start each section on a new page
echo "\section{$i}" >> $tex_file ## Create a section for each filename
## This command will include the file in the PDF
echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
done &&
echo "\end{document}" >> $tex_file &&
pdflatex $tex_file -output-directory . &&
pdflatex $tex_file -output-directory . ## This needs to be run twice
## for the TOC to be generated
在包含源文件的目录中运行脚本
bash src2pdf
这将all.pdf
在当前目录中创建一个名为的文件。我尝试了在系统上找到的几个随机源文件(特别是来自的两个文件)进行了尝试vlc-2.0.0
,这是生成的PDF的前两页的屏幕截图:
几点评论:
a2ps -P file *.src
您可以从源代码中生成脚本文件。但是PS文件需要随后进行转换和合并。