備忘録やめた

備忘録として使用していたけどやめた.このブログに載せてあるコードのライセンスは別途記載がない限りWTFPL OR NYSLです.

書いたコードをレポート内に全部掲載する

注意

Linuxのシェルコマンドを利用しているため,恐らくWindowsではコマンドを変更する必要があります.

コード

プリアンブル

\usepackage{listings}
\newcommand{\listcode}[1]{
    \appexe{ls #1/*.java | xargs -I {} sh -c "echo '\\lstinputlisting[caption=';basename {}|tr -d '\\n';echo ']{{}}'" > \jobname.tmp}
    \input{\jobname.tmp}
    \AtEndDocument{\appexe{rm -f \jobname.tmp}}
}

*.javaの部分はお好みに合わせて変更してください.

利用例

\listcode{../programming/helloworld}

コンパイル

-shell-escapeを忘れないでください.

uplatex -shell-escape foo.tex

解説

まず,ファイル一覧を加工して,\jobname.tmpに保存し,それをそのままコードに挿入します.最後にtmpファイルを削除します.

\documentclass[dvipdfmx,uplatex,a4j,12pt]{jsarticle}
\usepackage{listings}
\lstset{%
    basicstyle={\ttfamily\small},
    commentstyle={\ttfamily\small},
    frame=tb,
    breaklines=true,
    lineskip=-0.5ex,
    tabsize=2,
    numbers=left,
    numberstyle={\ttfamily\scriptsize},
    columns=[1]{fullflexible},
}
\newcommand{\appexe}{\immediate\write18}
\newcommand{\listcode}[1]{
    \appexe{ls #1/* | xargs -I {} sh -c "echo '\\lstinputlisting[caption=';basename {}|tr -d '\\n';echo ']{{}}'" > \jobname.tmp}
    \input{\jobname.tmp}
    \AtEndDocument{\appexe{rm -f \jobname.tmp}}
}

\renewcommand{\lstlistingname}{ソースコード}
\begin{document}

\title{Hello World!}
\author{Goodbye World}
\maketitle

\listcode{../helloworld}

\end{document}

pdf
実行例

参考

shell escape - What are \immediate & \write18 and how does one use them? - TeX - LaTeX Stack Exchange

listings - How can I automatically include all source code files located in a given directory? - TeX - LaTeX Stack Exchange

shell - Piping commands after a piped xargs - Unix & Linux Stack Exchange