注意
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}
参考
shell - Piping commands after a piped xargs - Unix & Linux Stack Exchange