私は特定のディレクトリのツリービューとそのサブディレクトリの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
2回実行する必要があります。
昆虫:
このスクリプトはただ概念の証拠、画像の種類は制限され、最終的に助けを借りて改善することができます。イメージマジシャン、ネットワーク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
。