2008年09月26日
TeXでファイルに何か書き込む
- 2008-09-26 (Fri)
- 一般
TeXのソース中の何箇所かでメモっておいたことを,dvi出力の最後にまとめて列挙してもらいたいなぁと.で,メモをファイルに書き出しておいて最後にそのファイルをインクルードすりゃいいんじゃねとやって見た記録.
\newwriteで使ってないストリームを確保.\openoutでファイルオープン.\jobnameでtexファイルの名前がわかるから,それに合わせた名前のファイルを出力先にするといいかもしれない.ついでに,\immediateつけて即座に処理させる(つけないとdviへの出力時に処理されることになる).
\newwrite\hogestream \def\todofile{\jobname.hoge} \immediate\openout\hogestream=\hogefile
用意したストリームに文字列出力するのは\writeだそうで.用意したストリームに出力を投げるマクロとか書いとくと次みたいになる.ただ,文字列中のマクロ展開をその場でやってほしいので,\edefで引数を処理してから投げる.ついでに,\writeの書き込み時に展開してほしくないマクロには\stringとつけるといいらしい.\immediateはdvi出力を待たずにその場で出力するため.
\def\hoge#1{% \edef\hogetxt{#1}% \immediate\write\hogestream{\string\item{} \hogetxt}% }
最後の出力.とりあえず\closeoutでストリームを閉じて.\inputでファイル読み込めばいい.ほかにも,ファイルを一行ずつ読み込むこともできるらしい(\writeが一行ずつ出力することに対応).
\immediate\closeout\hogestream% \section*{HOGEs}% \begin{itemize}% \input{\hogefile}% \end{itemize}%
あとはラベルと参照を対応して付けておけばhyperrefでメモ一覧からメモの場所に飛べるようになるでしょう.セクション単位で飛ばすのは楽だけど,もっと細かく段落とかの単位で飛ばすにはどうするか?
- Comments: 0
- TrackBack (Close): -