나는 당신의 질문에 흥미를 느꼈고 약간 쫓겨났습니다. 이 솔루션은 클릭 가능한 색인과 색상으로 강조 표시된 코드로 멋진 PDF 파일을 생성합니다. 현재 디렉토리와 하위 디렉토리에서 모든 파일을 찾고 PDF 파일에서 각 파일에 대한 섹션을 만듭니다 (찾기 명령을보다 구체적으로 만드는 방법은 아래 참고 사항 참조).
다음을 설치해야합니다 (설치 지침은 데비안 기반 시스템 용이지만 배포 리포지토리에서 사용할 수 있어야합니다).
설치가 완료되면이 스크립트를 사용하여 소스 코드로 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
소스 코드에서 포스트 스크립트 파일을 생성 할 수 있습니다. 그러나 PS 파일은 나중에 변환하고 결합해야합니다.