この記事は,UEC2 Advent Calendar 2020の一日目の記事です.
はじめに
レポート作成中に,結果やコードの誤りに気付いて,コードを修正して,コンパイルして,実行して,結果を修正する,というプロセスを改善します.コードの修正は自分で行ないますが,それ以降のコンパイル等をLaTeXのコンパイルの際に同時に行ないます.
使うもの
bashful
というパッケージを使います.以下のusepackage
文を記述してください.
\usepackage{bashful}
尚,Gentooでは2020年11月30日現在,dev-texlive/texlive-latexextra
をemerge
すればインストールされます.
%e-file bashful.sty [I] dev-texlive/texlive-latexextra Available Versions: 2016 2017 2019-r2 2020 2020-r1 2020-r2 Last Installed Ver: 2020-r2(2020年10月21日 16時16分27秒) Description: TeXLive LaTeX additional packages Matched Files: /usr/share/texmf-dist/tex/latex/bashful/bashful.sty;
使い方
\documentclass[dvipdfmx,uplatex,a4j,12pt]{jsarticle} \usepackage{listings} \usepackage{bashful} \lstset{% basicstyle={\ttfamily\small}, commentstyle={\ttfamily\small}, frame=tb, breaklines=true, lineskip=-0.5ex, tabsize=2, numbers=left, numberstyle={\ttfamily\scriptsize}, columns=[1]{fullflexible}, } \begin{document} \title{\LaTeX Example} \author{\LaTeX \LaTeXe \pLaTeX \upLaTeX} \maketitle \lstinputlisting[caption=main.rs]{main.rs} \bash[stdoutFile=stdout.tex,stderrFile=/dev/null] rustc main.rs ./main \END \lstinputlisting[caption=stdout]{stdout.tex} \end{document}
こんな感じに,出力を貼り付けることが出来ます.ソースコードを編集すると,LaTeXコードのコンパイル時に再度プログラムが実行され,出力が自動で更新されます.*1
仕組み
コンパイル時に,\bash
と\END
で囲まれた間のシェルスクリプトが実行され,指定されたファイルに標準出力が書き込まれます.それをlstinputlisting
を使って貼り付けるだけです.
*1:画像ではPDFが三ヶ月前に出力されたものとなっていますが,これは,僕がこの記事を3ヶ月前に書き,結局公開せず放置していたものを,アドベントカレンダーに登録するために使用したからです.2020年11月30日現在もこのLaTeXコードをコンパイルすると同じPDFが得られます.