講義でノートとるときにTeXで書きたいけどめんどくさいからTeXに書き換えるスクリプト書いた
インデント使いましょう!
手書きでノートとるのちょっと気が引ける科目とかありますよね.
あとで追記したりするときもどうしてもキーボードでカチャカチャやったほうが・・・
TeXで書いたら綺麗になるし,でもタグ書くのもめんどくさいし・・・
・・・!!
インデントで項目分ければいいじゃない!!
つまり,
Gentooについて 可愛い 熱心なファンが存在する 愛でたくなる おしゃれ 女子力アップ! どう考えてもオムライス女子よりGentoo女子の方がいいでしょ すばらしい スバラシス!!! 女子力について 合コンで役立つ能力 合コン:合同コンパイル %begin{texmode} \[ 女子力 = \int_{0}^{コア数} 女装力^{x} dx \] %end{texmode} Gentooのインストールできないんですぅ・・・ これで相手もメロメロやで
みたいにノートとると,
\documentclass{jsarticle} \begin{document} \section*{Gentooについて} \begin{itemize} \item 可愛い \begin{itemize} \item 熱心なファンが存在する \item 愛でたくなる \end{itemize} \item おしゃれ \begin{itemize} \item 女子力アップ! \item どう考えてもオムライス女子よりGentoo女子の方がいいでしょ \end{itemize} \item すばらしい \begin{itemize} \item スバラシス!!! \end{itemize} \end{itemize} \section*{女子力について} \begin{itemize} \item 合コンで役立つ能力 \begin{itemize} \item 合コン:合同コンパイル %begin{texmode} \[ 女子力 = \int_{0}^{コア数} 女装力^{x} dx \] %end{texmode} \end{itemize} \item Gentooのインストールできないんですぅ・・・ \begin{itemize} \item これで相手もメロメロやで \end{itemize} \end{itemize} \end{document}
こんな感じに出力されます.
そして,こんな感じに仕上がるのです・・・!!
すばらしいじゃないですか!
記法とか
- タブインデントで項目を分けます
- タブなしだと\section*{}になります
- %begin{texmode}, %end{texmode} でそのまま出力するかどうかを切り替えます
- 数式とか書く時はモード切り替えましょう
個人的には当面は多分これで事足りると思いますが,個人的にはPerlのコードとか埋め込めれば便利かなぁとか思ってます.
Pythonで書いてみた
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys, re CurrentDepth = 0 texmode = False START = 0 END = 1 newDepthTag = [['', ''], ['\\begin{itemize}', '\\end{itemize}']] depthTag = [['\\section*{', '}'], ['\\item ', '']] isWhiteSpace = re.compile(r'^[ \t\r\n]*$') isComment = re.compile(r'^[ \t\r\n]*%.*') def sign(num) : if num == 0 : return 0 elif num > 0 : return 1 else : return -1 def countTab(line) : tabs = 0 while line[tabs] == '\t': tabs += 1 return tabs def simplify(line) : while line[0] == '\t' : line = line[1::] return re.sub('\n', '', line) def changeTexMode(line) : if plainline == '%begin{texmode}' : return True elif plainline == '%end{texmode}' : return False # begin document print '\\documentclass{jsarticle}' print '\\begin{document}' # input lines from stdin for line in sys.stdin: if isWhiteSpace.match(line) != None : continue depth = countTab(line) plainline = simplify(line) m = changeTexMode(plainline) if m != None : texmode = m print line, continue if texmode == True : print line, continue if isComment.match(line) != None : print line, continue if depth > CurrentDepth : CurrentDepth = depth print "%s%s" % ('\t'*CurrentDepth, newDepthTag[sign(CurrentDepth)][START]) elif depth < CurrentDepth : for i in range(CurrentDepth - depth) : print "%s%s" % ('\t'*(CurrentDepth-i), newDepthTag[sign(CurrentDepth-i)][END]) CurrentDepth = depth print "%s%s%s%s" % ('\t' * CurrentDepth, depthTag[sign(CurrentDepth)][START], plainline, depthTag[sign(CurrentDepth)][END]) # close blocks for i in range(CurrentDepth) : print "%s%s" % ('\t'*(CurrentDepth-i), newDepthTag[sign(CurrentDepth-i)][END]) CurrentDepth = 0 # end document print '\\end{document}'
使い方とか
標準入力から読んで標準出力に吐くようになってるので,適当にtxt2tex.pyとか名前つけて
./txt2tex.py < input.txt > output.tex && platex output.tex && dvipdfmx output.dvi
とかすると,PDFになってうれしいね!
よしよし,これで煩わしいノート取る作業もちょっと楽になりそう.