何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

手軽にインタラクティブ(?)なシステムを

TeX & LaTeX Advent Calendar 2013のために書かれた記事ではありません。

私が大学院に進学し、ショックを受けたのは見知らぬ横文字が飛び交う講義が多かったことである。電気通信大学の学部時代に学科改組が行われた故の悲劇である。その横文字の1つが「インタラクティブ」である。学部で情報通信の基礎や電磁気学離散数学などを比較的重厚な、体系だった学問*1を学んできた私にとっていきなり軽い、学問なのかよくわからないものは聞いていて辛かった。

さて、(La)TeXの使い方の1つとして、データベースやWebフォームからの入力をテキストファイル、つまりTeXファイルに変換して…というのがある。今回はPythonTeXを用いてそれらしきものを作ってみようと試みた。しかし、以下のファイルを実行してみればわかるがシステムとしては不完全である。

\documentclass[a4j]{jsarticle}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{otf}
\usepackage{lmodern}

\usepackage[dvipdfmx]{graphicx}

\usepackage[makestderr]{pythontex}
\restartpythontexsession{\thesection}

\begin{pycode}
import datetime
def aisatsu():
    date = datetime.datetime.today()
    zikou = dict(zip(list(range(1,13)),
             ["厳寒","青寒","早春","陽春","新緑","向夏",
              "猛暑","残暑","初秋","仲秋","晩秋","初冬"]))
    
    s = r"\noindent 拝啓\hspace{1zw}"
    s += zikou[date.month] + "の候、益々ご清栄のこととお喜び申し上げます。"
    return s
    
def todayYoubi():
    date = datetime.datetime.today()
    youbi = dict(zip(list(range(7)),
            ["月","火","水","木","金","土","日"]))
    s = youbi[date.weekday()]
    return s
    
def altNow():
    date = datetime.datetime.today()
    return (str(date.year) + " 年 " + str(date.month) + " 月 "
                + str(date.day) + " 日 ")
                
recieve_syozoku = input("送り先所属:")
recieve_name = input("送り先名前:")
send_syozoku = input("送り元所属:")
send_name = input("送り元名前:")
main_title = input("タイトル:")
\end{pycode}

\begin{document}
\begin{flushright}
\py{altNow()}
\end{flushright}

\begin{flushleft}
\py{recieve_syozoku}

\py{recieve_name+" 様"}
\end{flushleft}

\begin{flushright}
\py{send_syozoku}

\py{send_name}
\end{flushright}

\begin{center}
{\large \py{main_title}}
\end{center}

\py{aisatsu()}

さて、今回はとある電通大のとある学科で大流行しているインタラクティブなシステムのまがいものをPython\TeX で作成しました。
今日は\py{todayYoubi()}曜日です。
\end{document}

f:id:XaroCydeykn:20131225233959j:plain
内容としては、Pythonのinput()函数で標準入力から送り先の所属・名前、送り主の所属・名前、表題を受け取りそれらしい文章を作るTeXファイルである。問題はinput()函数で標準入力を受け取る際に何も表示されないのである。
イメージとしては

$ pythontex intractive.tex
This is PythonTeX v0.12
慶應義塾大学
福沢諭吉
早稲田大学
大隈重信
早慶戦のお知らせ

--------------------------------------------------
PythonTeX:  intractive - 0 error(s), 0 warning(s)

となる。
PythonTeXではなくPythonスクリプトとして作成するべきではないかと思い始めたがどうなのだろう。

*1:体系だってない学問は学問ではない