ฉันรู้สึกทึ่งกับคำถามของคุณและได้หายไป โซลูชันนี้จะสร้างไฟล์ PDF ที่ดีพร้อมดัชนีที่คลิกได้และรหัสสีที่เน้น มันจะค้นหาไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยและสร้างส่วนในไฟล์ PDF สำหรับแต่ละไฟล์ (ดูหมายเหตุด้านล่างสำหรับวิธีทำให้คำสั่ง find ของคุณเฉพาะเจาะจงมากขึ้น)
มันต้องการให้คุณมีการติดตั้งต่อไปนี้ (คำแนะนำการติดตั้งสำหรับระบบที่ใช้เดเบียน แต่สิ่งเหล่านี้ควรมีอยู่ในที่เก็บของการแจกจ่ายของคุณ):
pdflatex
, color
และlistings
sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
สิ่งนี้ควรติดตั้งระบบ LaTeX พื้นฐานหากคุณยังไม่ได้ติดตั้ง
เมื่อติดตั้งแล้วให้ใช้สคริปต์นี้เพื่อสร้างเอกสาร LaTeX ด้วยซอร์สโค้ดของคุณ เคล็ดลับคือการใช้listings
(ส่วนหนึ่งtexlive-latex-recommended
) และcolor
(ติดตั้งโดยlatex-xcolor
) แพ็คเกจ LaTeX นี่\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 ที่เป็นผลลัพธ์:
ความคิดเห็นที่สอง:
- สคริปต์จะไม่ทำงานหากชื่อไฟล์ซอร์สโค้ดของคุณมีช่องว่าง เนื่องจากเรากำลังพูดถึงซอร์สโค้ดฉันจะถือว่าพวกเขาไม่ได้
- ฉันเพิ่ม
! -name "*~"
เพื่อหลีกเลี่ยงไฟล์สำรอง
ฉันขอแนะนำให้คุณใช้find
คำสั่งที่เฉพาะเจาะจงมากขึ้นเพื่อค้นหาไฟล์ของคุณมิฉะนั้นไฟล์สุ่มใด ๆ จะรวมอยู่ใน PDF หากไฟล์ของคุณทั้งหมดมีนามสกุลเฉพาะ ( .c
และ.h
ตัวอย่าง) คุณควรแทนที่find
สคริปต์ด้วยสิ่งนี้
find . -name "*\.c" -o -name "\.h" | sed 's/^\..//' |
- เล่นกับ
listings
ตัวเลือกต่างๆคุณสามารถปรับแต่งสิ่งนี้ให้ตรงตามที่คุณต้องการ
a2ps -P file *.src
คุณสามารถสร้างไฟล์ postscript ได้จากซอร์สโค้ดของคุณ แต่ไฟล์ PS จะต้องมีการแปลงและรวมภายหลัง