Keijir Blog

やっぱハワイ行きたいよね

論文の章立てを抜き出して箇条書きにするスクリプト

Tex で論文を作成している方のみ対象になります.

卒論,修論の報告を tex でするとき もしくは,作業中の論文の進捗具合を他の人に報告するのに,
論文の章立てにどのくらいですよとか,報告用の文章に張り込む作業が発生します.
まぁ本文毎回みればいいじゃないかってのはなしで.


以下が章立ての例

\section{はじめに}
\subsection{背景}
\subsubsection{うんたらかんたら}


張り込む時は箇条書きにして書くので以下になる...

\begin{enumerate}
\item[1] はじめに
\item[1.1] 背景
\item[1.1.1] うんたらかんたら
\end{enumerate}


texコンパイルすると以下のような感じになるはず

1. はじめに
1.1 背景
1.1.1 うんたらかんたら

なんかいろいろ変えたり番号つけたりとかめんどくさい!
一回章立てしたらもう変えねーよ!って方はすばらしいと思うのですが,
ちょっとかわったりって事があってめんどくさいので,
Rubyスクリプト作成してみた.

syou.rb ver2

#!/usr/bin/ruby -Ks
require 'kconv'
filename = "syou.tex"
$foo = File.open(filename,'w')
$s = 0
$ss = 0
$sss = 0

def texinput(filename)

File.open(filename,"r"){|file|
    while line=file.gets
      if /\%/ =~ line

      elsif /\\section\{(.+)\}/ =~ line
        $s += 1
        $ss = 0
        $sss = 0
        $foo.print "\\item[" , $s , "] " , $1.toutf8, "\n"
        
      elsif /\\subsection\{(.+)\}/ =~ line
        $ss += 1
        $sss = 0
        $foo.print "\\item[" , $s , "." , $ss , "] " , $1.toutf8 , "\n"
        
      elsif /\\subsubsection\{(.+)\}/ =~ line
        $sss += 1
        $foo.print "\\item[" , $s , "." , $ss , "." ,  $sss , ".] " , $1.toutf8 , "\n"
        
      elsif /\\input\{(.+)\}/ =~ line
        texinput($1)
      end
    end
}
end

$foo.puts "\\documentclass[a4j,fleq,twocolmun]{jarticle}"
$foo.puts "\\begin{document}"
$foo.puts "\\begin{enumerate}"
texinput(ARGV[0])
$foo.puts "\\end{enumerate}"
$foo.puts "\\end{document}"
$foo.close()

一応 \input で他のソース読んでても大丈夫.

実行手順

$ syou.rb main.tex

そうすると syou.tex が作成されます.
そのままコンパイルもできます.

まぁ自分用メモのつまんないスクリプトでした.

追記

syou.texが文字化けする場合があるのでソースを変更した.
Ruby/ てっとり早く文字コードを変換したい
ここを参考に