저는 특정 디렉토리의 트리뷰와 해당 하위 디렉토리의 PDF를 Latex를 통해 인쇄하고 해당 기본 디렉토리에 포함된 모든 스크립트의 제목과 내용을 인쇄하는 쉘스크립트를 작성하려고 합니다.
트리 보기는 매력적으로 작동하지만 스크립트 인쇄가 작동하도록 하는 방법을 모르겠습니다.
지금까지의 코드:
#!/bin/bash
# Script to export directory with pdflatex
# Generate .tex file
# Directory Listing
echo "\documentclass[11pt,a4paper,oneside]{article}" > tmp.tex
echo "\usepackage{fullpage}" >> tmp.tex
echo "\begin{document}" >> tmp.tex
echo "\section{Listing}" >> tmp.tex
echo "\begin{verbatim}" >> tmp.tex
tree $1 >> tmp.tex
echo "\end{verbatim}" >> tmp.tex
echo "\end{document}" >> tmp.tex
# ShellScript printout
???????
# Generate .pdf file
pdflatex tmp.tex
#Cleanup
rm tmp.tex
답변1
디렉토리 트리 및 스크립트 파일 내용을 예쁘게 인쇄합니다.
편집하다: 2부에서 트리 및 이미지 지원으로 전체 목차가 포함된 최신 버전입니다.
\verbatiminput
패키지에서 사용말 그대로.
이와 같이:
#!/bin/bash
tempfile=$(mktemp /tmp/dirtree-XXXXX.tex)
trap "rm $tempfile" 0 1 2 3 6 9 15
cat <<EOF >$tempfile
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{fullpage,verbatim,dirtree}
\begin{document}
\section{Listing}
\dirtree{%
EOF
export -a scriptList=()
while IFS=/ read -a fPath ;do
file="${fPath[*]:${#fPath[*]}-1}"
IFS=/
full="${fPath[*]}"
type="$(file -b "$full")"
echo .${#fPath[@]} "${file//_/\\_}\DTcomment{$type}. "
[[ "$type" =~ script.text ]] && scriptList=("${scriptList[@]}" "$full")
done < <(
find $1 -type d -o -type f
) >>$tempfile
export IFS=$'\n\t '
echo "}" >>$tempfile
for file in "${scriptList[@]}";do
name="${file##*/}"
printf "\\section{%s}\n{\\\\scriptsize\\\\verbatiminput{%s}}\n" \
"${name//_/\_}" "${file}" >>"${tempfile}"
done
echo >>"${tempfile}" '\end{document}'
pdflatex -interaction nonstopmode "${tempfile}"
누가 이 출력을 생성할 것인가:
목차, 스크립트 및 이미지 파일이 포함된 예쁜 인쇄 디렉토리 트리입니다.
참고: 계산에 사용됨목차, latex
두 번 실행해야 합니다.
곤충:
이 스크립트는 단지개념의 증거, 이미지 유형은 제한될 수 있으며 결국 도움을 받아 개선될 수 있습니다.이미지 마술사,네트워크 PBM또는 그래픽 라이브러리 등.
해:
- 이미지 크기 수정
- 향상된 이미지 필터링
- pdf, ps 및 .man, .tex, .sgml, .odf와 같은 기타 인쇄 가능한 파일에 대한 지원이 추가되었습니다.
- 문서 파일의 첫 페이지를 인쇄하는 옵션이 추가되었습니다.
- 임시 파일이 더 정확하게 생성되고 지워집니다.
바로 거기:
#!/bin/bash
tempfile=$(mktemp /tmp/dirtree-XXXXX.tex)
# trap "rm $tempfile" 0 1 2 3 6 9 15
cat <<EOF >$tempfile
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{fullpage,graphicx,verbatim,dirtree}
\makeatletter
\newcommand{\typePPage}[2]{\DTcomment{{\scriptsize #1
\begin{minipage}[t]{5em}\mbox{}\hfill\ifx\@empty#2\else%
s.$\ref{sec:#2}$, p.$\pageref{sec:#2}$\fi\end{minipage}}}}
\makeatother
\begin{document}\parindent=0pt%
\section{Listing}
\dirtree{%
EOF
export -a scriptList=()
export -A typelist=()
while IFS=/ read -a fPath ;do
file="${fPath[*]:${#fPath[*]}-1}"
IFS=/
full="${fPath[*]}"
type="$(file -b "$full")"
if [[ "$type" =~ script.text ]] || [[ "$type" =~ image ]] ;then
scriptList=("${scriptList[@]}" "$full")
typelist["${full//\//_}"]="$type"
echo .${#fPath[@]} \
"${file//_/\\_}\typePPage{$type}{${file//[\/.+()_-]/}}. "
else
echo .${#fPath[@]} "${file//_/\\_}\typePPage{$type}{}. "
fi
done < <(
find $1 -type d -o -type f
) >>$tempfile
export IFS=$'\n\t '
echo "}" >>$tempfile
for file in "${scriptList[@]}";do
name="${file##*/}"
printf '\\section{%s}\n\\label{sec:%s}\n' \
"${name//_/\_}" "${name//[\/.+()_-]/}"
if [[ "${typelist["${file//\//_}"]}" =~ script.text ]];then
printf '{\\scriptsize\\verbatiminput{%s}}\n' "${file}"
else
printf '\\includegraphics[width=\\textwidth]{%s}\n' "${file}"
fi
done >>"${tempfile}"
echo >>"${tempfile}" '\end{document}'
pdflatex -interaction nonstopmode "${tempfile}" >/dev/null 2>&1
pdflatex -interaction nonstopmode "${tempfile}"
생산할 수 있는 것:
답변2
나는 당신이 원하는 것이 무엇인지 잘 모르겠지만, 내가 이해한 바로는 .sh
모든 파일의 출력이 tmp.tex로 인쇄되기를 원한다는 것입니다. 그러면 당신은 다음과 같은 것을 할 수 있습니다
find -name "*.sh" -exec cat "{}" + >> tmp.tex
모든 .sh
파일을 연결한 다음 tmp.tex
.