Wikiで記述する方式の卒業論文作成システムの提案

名前:小林 大輔

学籍番号:HT12A038

日付:2024-05-07

指導教員:兼宗 進

年度:2014

所属:総合情報学部 メディアコンピュータシステム学科

本研究では、Wikiで記述する方式の論文作成システムの提案を行う。
論文執筆を行う際に使用するソフトウェアのひとつに、LaTeXがある。
これは、ユーザがTeXmakerやEmacs等のエディタに命令や文章を記述し、コンパイルをすることで出力結果を得ることができる。
しかし、出力結果を予測しないといけないため、初学者がLaTeXを用いて論文執筆を行うことは困難である。
そこで、ボタンひとつで出力結果を見ることが可能なPukiWikiで、LaTeX形式の論文作成に取り組めるシステムを提案する。

LaTeX PukiWiki

~はじめに 【chap1】

文章を作成するためのソフトウェアには「Microsoft Word」や「Open Office Writer」、「LaTeX」等がある。

上記に記述したソフトウェア以外にも、様々な文章作成ソフトウェアが存在するが、論文作成には主にLaTeXを用いられることが多い。

LaTeXは、ユーザがTeXmaker?やEmacs等のエディタにLaTeXの命令や本文を記述したあと、コマンドラインを用いてコンパイルすることで、PDFファイルといった閲覧用ファイルを取得することが可能である。数式を扱うのに長けており、複雑な数式を美しく出力することができ、理系の文章作成において用いられることが多い。

本学科の卒業論文作成にもLaTeXを使用することが定められている。しかし、LaTeXの命令には複雑なものが多く、LaTeXの命令を参考書やインターネットなどで調べながら文章作成やコンパイルを行い、レイアウトなどの確認をする。卒業論文を書く場合、文章の内容を考え、何十ページも記述しなければならないため、負担が大きいと考えた。

そこで、本研究では、Wiki形式で記述する方式の卒業論文作成システムの提案をする。Webブラウザ上で、論文作成を行えるようにすることで、環境設定の手間を省く。提案したシステムで、記述した文章を保存すると、PDFファイルを得ることも可能にした。

本論文では次のような構成にした。第【【chap2】】章では、様々なソフトウェアの説明を述べる。第【【chap3】】章では、本学科での論文執筆方法と、本研究で提案する卒業論文作成システムについて述べる。第【【chap4】】章では、論文作成システムの実装について述べる。第【【chap5】】章では、本研究に対するまとめと考察を述べる。

~様々な文章作成ソフトウェア 【chap2】

Microsoft Word

Microsoft社が、WindowsおよびMac OS向けに発売している文章作成ソフトウェア(図【【word】】)である。ボタンひとつで、文字を中央に寄せたり、文字のサイズや書式を変更できる。文字や図や表の配置の自由度が高い。論文作成をする際に必要な、画像や表に対するラベル付けをするといったことはできない。

word1.png
(Microsoft Word,【word】)

Open Office Writer

オープンソースで開発されたフリーの統合オフィスソフト「OpenOffice?.org」の内のひとつ(図【【writer】】)。誰でも無料で利用できる。基本的な画面や操作方法は「Word」と似ているが、サポートされていない機能もある。wordと同じく、画像や表に対するラベル付けをすることができない。

writer1.png
(Open Office Writer,【writer】)

LaTeX

LaTeXとは、TeXにパッケージを組み込むことで構築されている。ソースコードを作成し、コンパイルを行うことで初めてDVIやPDFなどの閲覧用のファイルを得ることが可能である。数式を綺麗に出力することが可能である。しかし、コンパイルを行わないと、どのような出力がえられるかが分かりにくい。また、記述する際には多くの命令が必要となるが、命令が複雑である。

PukiWiki

PukiWikiとは、独自の記法であるPukiwiki記法や文章を記述すること、でWebページの作成や変更が可能である。プレビューを行うことで、出力結果をすぐに見れる。また、プラグインを導入することで、様々な機能を拡張して利用できる。

先行研究

先行研究として、関西学院大学の吉井了平氏が行った「Wiki2LaTeXフィルターの開発」がある。

この研究では、LaTeXで文章作成する際に頻出する命令を、PukiWikiの記法と、その他に自身で設定した記号に置き換えている。それにより、LaTeX命令の入力作業の軽減を実現している(図【【wiki2tex】】)。

PukiWiki記法をLaTeXmp命令へ変換するために、既存のフィルターである「pukipa.rb」を改良している。「pukipa.rb」とは、Pukiwikiの独自文法をHTMLに変換するプログラムである。本来、HTMLに変換し出力する部分を、対応するLaTeX命令へ変更している。PukiWiki記法を用いて作成した文章を、フィルターにかけることでLaTeXの命令へ変換している。

この研究では頻出する命令のみに対応している。しかし、表や図など対応していない命令があるため、論文を作成することはできない。

wiki2tex2.png
(先行研究での執筆方法の比較,【wiki2tex】)

~本学科の論文執筆方法と提案する方法 【chap3】

本学科の論文執筆方法

本学科の卒業論文の執筆には、LaTeXを扱っている。 卒業論文には様々な指定があり、指定通りに論文を作成するには、表【【iru】】中の項目や命令が必要である。

(論文作成に必要な項目や命令,【iru】)
タイトル著者
概要日付け
目次章立て
表紙付録
ラベル参照
ページ番号の設定学籍番号
指導教員年度
所属学部学科ページ番号の書式の設定

提案する方法

LaTeXは、インターネットからインストール等の環境設定をする。その後、TeXmaker?やEmacs等のエディタに、複雑な命令を入力し文章を作成しなければならない。また、コンパイルしなければどのような出力が得られるのかわからない。先行研究では、LaTeXの複雑を命令の入力を簡略化することでユーザの負担は軽減しているが、このシステムのみでは、LaTeXの命令を記述せずに論文を作成することはできない。

そこで、環境設定が不要なWebを用いる。ボタンひとつで出力結果がみれる。ひとつのシステムのみでPDFファイルを作成することが出来る。 このような機能がある論文作成システムを提案をする。

従来の論文作成方法と今回提案する論文作成方法を図【【texwiki】】に示す。

texwiki.png
(従来の方法と今回の提案,【texwiki】)

~研究内容 【chap4】

システムの概要

論文作成システムを作成するために、PukiWikiを扱う。記述したPukiWiki記法をLaTeXの命令へ変換することでコンパイルが可能な形式になる。しかし、変換するだけではPDFでの出力結果を見ることができないため、ページ更新ボタンを押すことで、PDFファイルを作成でできるようにした。

対応方法

PukiwikiとLaTeXではそれぞれ利用目的が違うため、必ずPukiWiki記法とLaTeXの命令が一致するとは限らない。最初に、一致している記法をから対応付けをし、その後、命令と一致しなかった記法を新たに作成し、対応付けをした。

まず、LaTeXで文章作成を行う際に頻出する命令をリストアップし、Pukiwiki記法との対照表を作成した。 その一部を、表【【lists】】に示す。

(対照表,【lists】)
Pukiwiki記法LaTeX命令(始まり)LaTeX命令(終わり)意味
*\sectionなし見出し
+\begin{enumerate}\end{enumerate}番号付リスト
-\begin{itemize}\end{itemize}番号なしリスト
|a|b|\begin{table}\end{table}表組み
#ref(ファイル名)\begin{figure}\end{figure}

LaTeXとPukiWikiで一致しないものについては、それぞれの意味が異なる場合でも対応させている。例えば、LaTeXには概要({abstract})という命令があるが、PukiWikiにはそのような記法はない。そのため、文頭に半角スペースを入力することで概要を暗示させる。PukiWikiでのプレビュー時に、Webブラウザに表示される文章やレイアウトをLaTeX形式を似せることでPDFのイメージができるようにした。

章立て

LaTeXには「章立て(\chapter)」や「見出し(\section)」という命令がある。しかし、Pukiwiki記法には「章立て」はなく「見出し(*)」しかない。Pukiwiki上では「*」を使用しなければプレビュー時に目次に表示されない為、見出しと章立てを「*」を用いた記述方法にした。しかし、Pukiwiki記法では「***(LaTeXでいう\subsubsection)」までしか対応されていない。そのため、文頭に「*~」と記述すると「章立て」とし、「見出し(*)」部分と区別するようにした(図【【chapsec】】参照)。

chapsec.png
(編集画面とプレビュー,【chapsec】)

ラベルと参照

Pukiwkiには文章や画像・表などにラベルを付け、参照するという記述法はなく、それぞれにアンカーやリンクを付けるといった命令しかない。 対照できない場合は、Pukiwikiのページ上や文章中に存在しても違和感がなく、かつ、文章作成中に使用しない記号を使用する必要があった。 今回は、ラベル(\label)と参照(\ref)をイメージさせるために、ラベルの代わりにすみつきカッコ( )と( 】)を用いた(図【【labref】】参照)。

labref.png
(Pukiwiki上でのラベルと参照,【labref】)

図の挿入

図を挿入する際には、一度Pukiwiki上に画像ファイルをアップロードし、(#ref(画像ファイル名),図の位置)と記述するとPukiwiki上に図が表示される。Pukiwikiではファイル名がその図の表示名になってしまうため、表示名を出力する命令を考え実装した(図【【ref1】】参照)。(*jpg)や(*.png)のファイルは画像が表示される。(*.eps)についてはファイル名のみが表示され、クリックすることで表示することが可能である。アップロード可能最大ファイルサイズは1,024KBである。

LaTeX命令へ変換しPDFにする場合にはTeXファイル(*.tex)と同じフォルダ内に画像ファイルを挿入しておく必要がある。

図【【ref1】】中の数字の説明は、1がPukiwikiでの図を挿入する命令。2で図の下部に表示名とラベルを表示している。

wikiref3.png
(図の挿入,【ref1】)

表の挿入

表を挿入する際、Pukiwikiでは非常に直感的な記述が可能である。しかし、通常の記述方法では、図と同様に、表示名やラベルを記述することが出来ない為、表示名とラベルの記述方法を考え実装した(図【【tab1】】)。 図【【tab1】】中の数字は、1がPukiwikiで表を挿入する命令。2で表の上部のタイトルとラベルを表示している。

tab2.png
(表の挿入,【tab1】)

タイトルなど表紙に記述する内容

論文には、タイトルや著者名や日付が必要である。他にも、卒業論文では、学籍番号や指導教員名、所属学科などを記述する必要がある。タイトルは最上の中央部に太字で出力し、日付はPukiwikiが標準で扱えるものを使用する。著者名や学籍番号等の、記述方式は似せるようにした(図【【title】】)。

title2.png
(表紙に記述する文章,【title】)

プログラムの処理

主なプログラムの処理方法

プログラムはPerlを用いて作成した。

下記はPukiwikiで箇条書きを使用した際に、プログラムが行う処理である。

  1. 文頭の記号を判別し、変数の値が0の場合、\begin{itemize}を出力する
  2. 文頭の記号を\itemへ変換し、変数の値を+1する
  3. 文頭に対応する記号が無い行、かつ変数の値が0以上であれば\end{itemize}を出力し変数の値を0にする

この処理を行った際の、変換前(Pukiwiki)と変換後(LaTeX)の比較を図【【item】】に示す。

LaTeX側で複数行に渡り記述する命令については、このような処理をベースとしている。

itempl.png
(箇条書きの変換前と変換後の比較,【item】)

その他、タイトル(\title)や目次(\tableofcontents)等、一行で判別が可能な命令については、文頭や文中に特定の文字や記号が存在した際に、LaTeXの命令に変換している。

図の挿入

LaTeXでの図の挿入時には、図を表示させる、図の場所を指定する、図のタイトルを出力する命令、場合によってラベルを付与する必要がある。 Pukiwikiでの入力(図【【lab1】】)をLaTeXの命令(【【lab2】】)へあてはめていく処理を行っている。

図【【lab1】】と図【【lab2】】中の数字は、1がファイル名。2が図を表示する位置。3が図のタイトル。4がラベルとなっている。

labnew.png
(Pukiwikiでの図の表示,【lab1】)
labnew1.png
(TeX命令へ変換後,【lab2】)

表の挿入

LaTeXで表の挿入を行う場合も、図の挿入のように複雑である。表をどの位置に出力するか、表中の要素の位置指定、表のタイトルを出力、ラベルを付与させるなどの命令が必要である。

Pukiwikiでは、各要素の位置指定を一つずつしなければならない。しかし、LaTeXの命令では列ごとに要素の位置指定が可能である。そのため、Pukiwikiで表の一行目に記述した位置指定を、変換後にはそれぞれの列の位置指定としている(図【【table1】】、図【【table2】】参照)。

table1.png
(表の挿入(変換前),【table1】)
table3.png
(表の挿入(変換後),【table2】)

アンカーの削除

Pukiwikiでは、ページ更新をした際に、見出し(*)を使用した文末にアンカーが付属してしまう(図【【ancer】】参照)。アンカーを放置したまま、LaTeXの命令に変換しターミナルなどでコンパイルをするとエラーが出てしまうため、LaTeXの命令へ変換する際にそのアンカーを削除する必要があった。文章作成時にアンカーのような文章を記述してしまうと、アンカーと同様に削除してしまう恐れがあった為、文頭が「*」で文末に特定の文字列が存在した場合のみ、アンカーを削除するようにした(図【【texanc】】参照)。

ancer.png
(ページ更新前と更新後の比較,【ancer】)
texanc3.png
(変換前と変換後の比較,【texanc】)

プリアンブルの付与

LaTeXは、「プリアンブル」をテキストファイルに記述しなければコンパイルすることが出来ない。そのため、今回は卒業論文で使用するプリアンブルを変換プログラムにかけた際に、自動で付与している(図【【puri】】参照)。その際に\begin{document}も一緒に付与し、\end{document}は文章の最後に付与している。これによりコンパイルが可能になる。

puri3.png
(プリアンブルの付与,【puri】)

表紙やページ番号の付与

論文を印刷した際に、表紙やページ番号がついていないと非常に見にくくなってしまう。しかし、Pukiwiki記法はWebページを作成する言語であるため、表紙やページ番号を付与させるような命令はない。そのため、LaTeX命令に変換した際に、特定の命令の前後にページ番号などの命令を付与させるようにした。

概要を記述すると、表紙と概要ページのページ番号を出力する命令を付与する。目次を記述すると、目次以下のページ番号を決められた書式で出力する命令を付与する(図【【pagenumber】】参照)。

しかし、プログラムが自動的に決められたページ番号を出力する為、現在はページ番号の書式の設定などは出来ていない。

page3.png
(表紙やページ番号の出力,【pagenumber】)

変換の自動化

LaTeXは、作成した文章をはPDFにする必要がある。コマンドプロンプトで、platexコマンドを使い、dviファイルを作成。その後、dvipdfmxコマンドを使い、PDFにする。これらの作業を自動化できないかと考えた。

自動化の際、2つの方法を試みた。1つ目はサーバーを用いた方法である。本研究で使用しているPukiwikiは、専用のサーバー内で動作させている。しかし、そのサーバー上ではLaTeXが動作しなかった。外部サーバーを扱うことも考えたが、ファイル取得の際に、サーバー移動をしなければならないため、ユーザに負担がかかってしまう。

次に、Dropboxを用いた方法を試みた。Dropboxでは、複数のコンピュータの間で、データの共有や同期が可能である。本研究室では卒業研究や卒業論文執筆についての作業はDropboxを用いて行っている。自身でサーバーにアクセスし、PDFを移動させるより、自動的に自身のPCに同期されるDropboxの方が便利だと考えた。ページ更新ボタンを押した際に、Pukiwikiで編集している文章をLaTeX形式の文章へ変換し、そのLaTeX形式の文章をコンパイルすることでPDFになる。そのPDFファイルをDropboxのフォルダ内に保存することを提案した。 その提案を実現するために、シェルスクリプトを用いてプログラムを作成した。

自動化を行うために、LaTeXをコンパイルするために用いるフォルダ内のファイルと、Pukiwikiで、文章作成を行っているページのディレクトリのコピーを作成する。この処理を、シェルスクリプトのrsyncコマンドを用いて行う。

本研究で作成した、Pukiwiki記法をLaTeXの命令へ変換するプログラムであるsample.plと、それを複製したw2t.plを用意する。Pukiwikiで更新ボタンが押された際に、sample.plが更新されているかチェックし、構文エラーが無ければ、w2t.plと見比べ、sample.plがw2t.plより新しくなっている場合、sample.plの文字コードを変更しw2t.plへ書き換える。

その後、Pukiwikiで文章作成時に更新されているページのリストを変数にいれる。値リスト.txtと、Dropbox内に存在するの値リスト.texを見比べる。値リスト.txtの方が新しい場合、そのテキストファイルを変換プログラムでLaTeX命令に変換しtexファイルへ書き換える。その後、2回コンパイルを行う。その際にエラーが出現した場合は、コンパイルを中止。エラーが出現しない場合はPDFファイルを生成する。上記の作業を30秒ごとに行う。 この処理をフローチャートに示したものが図【【flow】】である。

#ref(): File not found: "flow.png" at page "ht12a038"

(自動化プログラムの流れ,【flow】)

~まとめと今後の課題 【chap5】

本研究では、Wikiで記述する方式の卒業論文作成システムを作成した。

本システムを扱い本論文を作成した。PukiWikiを用いたことにより、プレビュー時に、文章やレイアウトを見ることでPDFのイメージができるようになった。また、ページ更新ボタンを押すだけでPDFが完成し、Dropboxへ更新されるため、コンパイルを行う手間を省けたのではないかと考える。

今後の課題として

以上が挙げられる。

課題に対する改良案として、作成したプログラムの見直しが必要であると考える。数式対応については、Pukiwikiにプラグインを導入し、そのためのプログラムを作成することで解決可能であると考える。スクロールや行番号問題に対しては、PukiWikiを改良しなければならない可能性が高いので検討する必要がある。PDFのファイル名については、文字解析を行い、正確な名称に変換する必要がある。これはシェルスクリプトのプログラムを改良することで、解決可能だと考える。

~おわりに

本研究では、LaTeXのような複雑な命令を記述しなくても、LaTeX形式の論文作成に取り組めるシステムを提案した。

Webブラウザ上で論文作成を行えるようにすることで、ダウンロードなどの環境設定の手間を省く。本研究で作成したシステムを利用し、記述した文章を保存すると、PDFファイルにすることが可能になり、ユーザへの負担も軽減と執筆作業に対する集中の向上を目指した。

まず、Pukiwiki記法を用いて作成した文章を、LaTeXの命令へ変換するプログラムを作成した。また、PukiWikiのページ更新ボタンを押すことで、Dropboxのフォルダ内にPDFファイルを作成するプログラムを実装した。

結果、本学科指定の論文作成をすることが可能になった。

今回、本論文をPukiwikiで作成するにあたり、使用できない命令や、細かい指定が出来ない等の課題を発見することが出来た。

今後は、発見した課題を解決するために試行錯誤をしていきたい。

~謝辞

本研究、本論文を終えるにあたり、御指導・御教授を頂いた兼宗進教授に深く感謝いたします。

また、学生生活における基礎的な学問、学問に取り組む姿勢をご教授頂いた、メディアコンピュータシステム学科の先生方に深く感謝致します。

また、本研究を進めるにあたり御教授いただきました、下倉雅行先生に深く感謝致します。

本研究期間中、本研究に対する貴重な御意見、御協力を頂きました島袋舞子氏に感謝致します。そして、卒業研究に共に励んだ兼宗研究室メンバー一同に感謝します。

*1 *2 *3 *4 *5


~プログラムリスト

my $ti=0; #タイトル my $abst=0; #概要 my $tc=0; #table my $ic=0; #item my $ec=0; #enumarete my $ac=0; #abst my $clc=0; #chapter.labe my $slc=0; #section.label my $anc=0; #sectoin ancor my $sanc=0; #sub anc my $ssanc=0; #subsub anc my $ref=0; my $bibi=0; my $fig=0; my $tab=0;

print "\\documentclass\[11pt\]\{oecu-thesis\}\n";

print "\\usepackage\{times\}\n";

print "\\usepackage\[dvipdfmx\]\{graphicx,color\}\n";

print "\\newcommand\{\\tag\}\[1\]\{\$\\langle";

print "\$\\nobreak\#1\\nobreak\$\\rangle\$\}\n";

print "\\newcommand\{\\stereotype\}\[1\]\{\\raisebox\{0.45ex\}\{\$\_\\ll\$\}

\\nobreak\n";

print "\#1\\nobreak\\raisebox\{0.45ex\}\{\$\_\\gg\$\}\}\n";

print "\\begin\{document\}\n";

while (<>){

	chomp;
	
	$count = (() = $_ =~ /\|/g);#"|"の数をカウント
	
	#べた書き
	if(/\'\'\'(.*)\'\'\'/){
		s/\'\'\'(.*?)\'\'\'/\\verb\+\1\+/g;
	}
	#図
	if(/\#ref\((.*?),(.*?)\)/){
		s/\#ref\((.*?),(.*?)\)//;
		print "\\begin\{figure\}\[h\]\n\\begin{$2}\n";
		print "\\includegraphics[width=0.8\\textwidth]{$1}";
		$fig = 1;
	}elsif(/CENTER\:\((.*?),\【(.*?)\】\)/ && $fig == 1){
		s/CENTER\:\((.*?),\【(.*?)\】\)//;
		print "\\caption{$1}\\label{$2}\n\\end{center}\n\\end{figure}\n";
		$fig = 0;
	}
	#表
	if(!/^\|/ && $tab != 0){
		print "  \\end\{tabular\}\n";
		print " \\end{center}\n";
		print "\\end\{table}\n";
		$tab=0;
	}elsif(/^CENTER:\((.*?),\【(.*?)\】\)/){
		print "\\begin{table}[h]\n";
		print " \\begin{center}\n";
		print "  \\caption{$1}\\label{$2}";
		s/^CENTER:\((.*?),\【(.*?)\】\)//;
		$tab++;
	}elsif(/^\|/ && $tab == 1){
		$str = $_;
		$str2 = $str;
		if($count != 0){
			print "   \\begin{tabular}{";
				s/\|//;
			for($j = 1; $j < $count; $j++){
				print "|";
				s/(.*?)\|//;
				if($1 =~ /CENTER:/){
					print "c";
				}elsif($1 =~ /RIGHT:/){
					print "r";
				}elsif($1 =~ /LEFT:/){
					print "l";
				}else{
					print "l";
				}
			}
			print "|} \\hline\n";
			$tab++;
		}
		$str2 =~s/RIGHT:|CENTER:|LEFT://g;
		$str2 =~ s/^\|//g;
		$str2 =~ s/\|/\&/g; #gはマッチするものを全て置換
		chop($str2);
		print "    ";
		print $str2 . " \\\\ \\hline";
		s/.*//;
	}elsif($tab != 0 && $count != 0){
		$str = $_;
		$str =~s/RIGHT:|CENTER:|LEFT://g;
		$str =~ s/^\|//g; 
		$str =~ s/\|/\&/g; #gはマッチするものを全て置換
		chop($str);
		print "    ";
		print $str . " \\\\ \\hline";
		s/.*//;
	}
	#改行
	if(/\&br\;/){
		s/\&br\;/\\\\/g;
		print $_;
	}
	#参照
	elsif(/『『.*』』/){
		s/『『(.*?)』』/\\cite\{\1\}/g;
		#print $_;
	}
	
	#タイトル
	if(/^CENTER:/ && /\'\'/){
		s/^CENTER: *(.*)/\\title\{\1\}/;
		s/\'\'//g;
		#print $_ . "\n";
	}
	#参考文献
	if(!/^\(\(/ && $bibi != 0){
		print "\\end\{thebibliography\}\n";
		$bibi=0;
	}elsif(/\(\((.*?),\【(.*?)\】\)\)/ && $bibi == 0){
		print "\\begin{thebibliography}{999}\n";
		print "\\bibitem\{$2\}$1" . "\n";
		$bibi++;
	}elsif(/\(\((.*?),\【(.*?)\】\)\)/ && $bibi >= 1){
		print "\\bibitem\{$2\}$1" . "\n";
		}
	
	#参照
	elsif(/【【.*】】/){
		s/【【(.*?)】】/\\ref\{\1\}/g;
		print $_;
	}
	#ラベル
	elsif(/【.*】/){
		s/【(.*?)】/\\label\{\1\}/g;
		print $_;
	}
	elsif(/^\<\<\</){
		s/^\<\<\</\\begin\{verbatim\}/g;
		print $_;
	}
	elsif(/^\>\>\>/){
		s/^\>\>\>/\\end\{verbatim\}/g;
		print $_;
	
	#keyword
	elsif(/^\>(.*?)/){
		s/\>/\\keywords\n/;
		s/ /\\quad\n/g;
		print $_ . "\n";
	}		
	#学生番号
	elsif(/^学生番号\:/){
		s/^学生番号: *(.*)/\\学生番号\{\1\}/;
		print $_ . "\n";
	}
	#指導教員
	elsif(/^指導教員:/){
		s/^指導教員: *(.*)/\\指導教員\{\1 教授\}/;
		print $_ . "\n";
	}
	#付録
	elsif(/----/){
		s/----/\\appendix\n/;
		print $_;
	}
	#著者
	elsif(/^名前:/){
		s/^名前: *(.*)/\\author\{\1\}/;
		print $_ . "\n";
	}
	elsif(/^名前:/){
		s/^名前:*(.*)/\\author\{\1\}/;
		print $_ . "\n";
	}
	#日付
	elsif(/^日付\:/){
		s/^日付\:\&_date;/\\date\{\\today\}/;
		print $_ . "\n";
	}
	#日付
	elsif(/^日付:/){
		s/^日付\:\&_date;/\\date\{\\today\}/;
		print $_ . "\n";
	}
	#年度
	elsif(/^年度:/){
		s/^年度\: *(.*)/\\年度\{\1\}/;
		print $_ . "\n";
	}
	
	#所属
	elsif(/^所属:/){
		s/^所属\: *(.*)/\\所属\{\1\}/;
		print $_ . "\n";
	}
		
	#概要
	elsif(/^ / && $abst >= 1){
		s/^ //;
		print $_ . "\n";
		$abst++;
	}elsif(/^ /){
		if($abst == 0){
			print "\\maketitle\n";
			print "\\pagenumbering\{roman\}\n";
			print "\\begin\{abstract\}\n";
			s/^ //;
			print $_ . "\n";
			$abst++;
		}
	}
	#箇条書き
	elsif(!/^-/ && $ic > 0){ #先頭が-じゃない場合
		print "\\end\{itemize\}\n";
		$ic=0;
	}elsif(!/^\+/ && $ec > 0){ #先頭が+じゃない場合
		print "\\end\{enumerate\}\n";
		$ec=0;
	}elsif($ic >= 1){
		s/^\-/\\item /;
		print $_ . "\n"; #読み込んでる一行
		$ic++;
	}elsif(/^-/){
		if($ic == 0){
			print "\\begin\{itemize\}\n";
			s/^\-/\\item /;
			print $_ . "\n"; #読み込んでる一行
			$ic++;
		}
	}
	#begin{enumerate}
	elsif($ec >= 1){
		s/^\+/\\item /;
		print $_ . "\n";
		$ec++;
	}elsif(/^\+/){
		if($ec == 0){
			print "\\begin\{enumerate\}\n";
			s/^\+/\\item /;
			print $_ . "\n"; #読み込んでる一行
			$ec++;
		}	
	}
	#*の後の[]を消す
	#謝辞
	elsif(/^\*\~謝辞/ && /\[.*\]/){
		s/ \[.*\]//;
		s/^\*\~謝辞/\\acknowledgment/;
		print $_ . "\n";
	}elsif(/^\*\*\*/ && /\[.*\]/){
		$ssanc = $_;
		$ssanc =~ s/ \[.*\]//;
		$ssanc =~ s/^\*\*\* *(.*)$/\\subsubsection\{\1\} /;
		print $ssanc . "\n";
	}elsif(/^\*\*\*/){
		s/^\*\*\* *(.*)$/\\subsubsection\{\1\} /;
		print $_ . "\n";
	}elsif(/^\*\*/ && /\[.*\]/){
		$sanc = $_;
		$sanc =~ s/ \[.*\]//;
		$sanc =~ s/^\*\* *(.*)$/\\subsection\{\1\} /;
		print $sanc . "\n";
	}elsif(/^\*\*/){
		s/^\*\* *(.*)$/\\subsection\{\1\} /;
		print $_ . "\n";
	}elsif(/^\*\~/ && /\\label\{.*\}/ && /\[\#.*\]/){
		s/ \[\#.*]//;
		s/^\*\~ *(.*?)(\\label\{.*\})/\\chapter\{\1\} \2/;
		print $_ . "\n";
	}elsif(/^\*\~/ && /\[.*\]/){
		s/ \[.*\]//;
		s/^\*\~ *(.*?)$/\\chapter\{\1\}/g;
		print $_ . "\n";
	}elsif(/^\*\~/){
		s/ \[.*\]//;
		s/^\*\~ *(.*)/\\chapter\{\1\}/;
		print $_ . "\n";
	}elsif(/^\*/ && /\\label\{.*\}/ && /\[.*\]/){
		$anc = $_;
		$anc =~ s/ \[.*\]//;
		$anc =~ s/^\* *(.*?)(\\label\{.*\})/\\section\{\1\} \2/g;
		print $anc . "\n";
	}elsif(/^\*/ && /\[.*\]/){
		s/ \[.*\]//;
		s/^\* *(.*?)$/\\section\{\1\}/g;
		print $_ . "\n";
	}elsif(/^\*/){
		s/^\* *(.*?)$/\\section\{\1\} /g;
		print $_ . "\n";
	}
	#目次
	elsif(/^\#contents/){
		print "\\end\{abstract\}\n";
		s/^\#contents/\\tableofcontents/;
			print $_ . "\n";
		print "\\cleardoublepage\n";
		print "\\setcounter\{page\}\{1\}\n";
		print "\\pagenumbering\{arabic\}\n";
	}
	#ページ参照
	elsif(/》》(.*)《《/){
		s/》》(.*?)《《/\\pageref\{\1\}/g;
		print $_;
	}
	#コメント
	elsif(/\\\\/){
		s/\\\\/\%/;
		print $_;
	}
	#中央寄せ
	elsif(/CENTER: *(.*)/){
		s/CENTER: *(.*)$/\\begin\{center\}\n \1\n\\end\{center\}\n/;
		print $_;
	}
	#左
	elsif(/LEFT: *(.*)/){
		s/LEFT: *(.*)$/\\begin\{flushleft\}\n \1\n\\end\{flushleft\}\n/;
		print $_;
	}
	#右
	elsif(/RIGHT: *(.*)/){
		s/RIGHT: *(.*)$/\\begin\{flushright\}\n \1\n\\end\{flushright

\}\n/;

		print $_;
	}
	elsif($_ eq ""){
		print "\n";
	}
		
	else{
		print $_ . "\n";
	}

}

print "\\end\{document\}\n";


*1 奥村 晴彦.LaTeX2ε 美文書作成入門.技術評論社.[1997-2010].,【tex】
*2 吉井 了平.Wiki2LaTeXフィルターの開発.[2010].,【yosii】
*3 増井 俊之.Perl書法.[1993].,【perl】
*4 Perl基礎入門 | KentWeb? '''http://www.kent-web.com/perl/''',【perl2】
*5 Uge.jp いつもWebにリファレンス uge.jp,【uge】

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS