名前:小林 大輔
学籍番号:HT12A038
日付:2024-11-24
指導教員:兼宗 進
年度:2014
所属:総合情報学部 メディアコンピュータシステム学科
本研究では、Wikiで記述する方式の論文作成システムの提案をする。 論文執筆を行う際に使用するソフトウェアのひとつに、LaTeXがある。 これは、ユーザがTeXmakerやEmacs等のエディタに命令や文章を記述し、コマンド実行等のコンパイル作業を行うことで出力結果を得ることができる。 しかし、初学者がLaTeXを用いて、コンパイル作業を行いながら論文を執筆することは難しいと考えた。 そこで、コンパイルの作業をせずに出力結果を見ることが可能な論文作成システムを開発した。
LaTeX PukiWiki Webブラウザ 文章変換 文章作成支援
文章を作成するためのソフトウェアには「Microsoft Word」や「Open Office Writer」、「LaTeX」等がある。
上記に記述したソフトウェア以外にも、様々な文章作成ソフトウェアが存在するが、論文作成には主にLaTeXを用いられることが多い。
LaTeXは、ユーザがTeXmaker?やEmacs等のエディタにLaTeXの命令や文章を記述したあと、コンパイル作業をすることで、PDFファイルといった閲覧用ファイルを取得することが可能である。数式を扱うのに長けており、複雑な数式を美しく出力することができ、理系の文章作成において用いられることが多い。
本学科の卒業論文作成にも、LaTeXを使用することが定められている。LaTeXは、命令や文章を記述したファイルを保存し、コマンド実行等のコンパイル作業を行い、閲覧可能なファイルを作成する。その後、出力結果の確認をする。卒業論文を書く場合、文章の内容を考え、何十ページも記述しなければならないため、コンパイル作業は手間であり、負担があると考える。
そこで本研究では、Wiki形式で記述する方式の卒業論文作成システムの提案をする。Wikiは、Webページを作成できるシステムであり、コンパイル作業の手間を省き、出力結果を見ることができる。提案したシステムで記述した文章を保存すると、PDFファイルを得ることも可能にした。
本論文では次のような構成になっている。第【【chap2】】章では、様々なソフトウェアの説明を述べる。第【【chap3】】章では、本学科での論文執筆方法と、本研究で提案する卒業論文作成システムについて述べる。第【【chap4】】章では、論文作成システムの実装について述べる。第【【chap5】】章では、本研究で提案したシステムの使用結果と考察を述べる。第【【chap6】】章では、本研究のまとめを述べる。
Microsoft社が、WindowsおよびMac OS向けに発売している文章作成ソフトウェア(図【【word】】)である。ボタンひとつで、文字を中央に寄せたり、文字のサイズや書式を変更できる。文字や図や表の配置の自由度が高い。
オープンソースで開発されたフリーの統合オフィスソフト「OpenOffice?.org」の内のひとつ(図【【writer】】)。無料で利用できる。基本的な画面や操作方法は「Word」と似ているが、サポートされていない機能もある。
LaTeXとは、組版ソフトであるTeXに、LaTeXマクロパッケージを組み込むことで構築されている。命令を用いて文章を作成し、コンパイル処理を行うことで初めてDVIやPDF等の閲覧用のファイルを得ることが可能である。数式を綺麗に出力することができる。
PukiWikiとは、Webブラウザ上で独自の記法を用いて、Webページを作成するWikiの一種である。PukiWikiでは独自の記法であるPukiWiki記法や文章を記述する。コンパイル作業を行わずに出力結果を見ることができる。
先行研究として、関西学院大学の吉井了平氏が行った「Wiki2LaTeXフィルターの開発」『『yosii』』がある。この研究では、LaTeXで文章作成する際に必要な命令の一部を、PukiWikiの記法と、その他に自身で設定した記号に置き換えている。それにより、LaTeX命令の入力作業の軽減を実現している(図【【wiki2tex】】)。
PukiWiki記法をLaTeXの命令へ変換するために、既存のフィルターである「pukipa.rb」を改良している。「pukipa.rb」とは、Pukiwikiの独自文法をHTMLに変換するプログラムである。本来、HTMLに変換し出力する部分を、LaTeX命令を出力するように変更している。PukiWiki記法を用いて作成した文章を、フィルターにかけることでLaTeXの命令へ変換している。
この研究では頻出する命令のみに対応している。しかし、表や図など対応していない命令があるため、論文を作成することはできない。
本学科の卒業論文の執筆には、LaTeXを扱っている。 卒業論文には様々な指定があり、指定通りに論文を作成するには、以下の項目や命令が必要である。
これらに対応する必要がある。
LaTeXは、TeXmaker?やEmacs等のエディタに、命令を入力し文章を作成する。その後、コンパイル作業をしなければ閲覧用のファイルを取得できないため、手間がかかる。先行研究では、LaTeXの命令の入力を簡略化することで、ユーザへの負担は軽減しているが、このシステムのみでは、表や図に対応していないため、LaTeXの命令を記述せずに論文を作成することはできない。
そこで、命令を独自に簡略化し、コンパイル作業の手間を省き、PDFファイルを作成することができる。これらの機能がある論文作成システムを提案をする。LaTeXでの文章作成方法(図【【texx】】)と、提案するシステムでの文章作成方法(図【【wikii】】)をそれぞれ示す。
LaTeXでのコンパイル手順と、今回提案するシステムでコンパイル処理を図【【texwiki】】に示す。LaTeXでは、ユーザがコンパイル作業を行いPDFを得るが、今回提案するシステムでは、自動でコンパイル処理を行うことで、ユーザのコンパイル作業の手間を省く。
本研究で提案するシステムはPukiWikiをベースに作成する。提案するシステムでは、文章の記述にはPukiWiki記法と、独自に提案する記法を用いる。PukiWiki記法を用いて作成した文章をLaTeX形式へ変換する。その後、コンパイル作業を行わずに、PDFファイルを作成できるようにした。
Pukiwikiは本来、Webページの作成に用いられる。一方で、LaTeXは論文作成のために用いられる。両者の利用目的が異なるため、必ずPukiWiki記法とLaTeXの命令が一致するとは限らない。そのため、命令と記法が一致しなかった記法を独自に作成し、対応付けをした。
例えば、LaTeXには概要({abstract})という命令があるが、PukiWikiにはそのような記法はない。そのため、文頭に半角スペースを入力することで概要を暗示させる。LaTeXで文章作成を行う際に必要な命令と、PukiWiki記法との対照表を表【【lists】】に示す。
Pukiwiki記法 | LaTeX命令(始まり) | LaTeX命令(終わり) | 意味 |
*~ | \chapter | なし | 章立て |
* | \section | なし | 大見出し |
** | \subsection | なし | 中見出し |
*** | \subsubsection | なし | 小見出し |
+ | \begin{enumerate} | \end{enumerate} | 番号付リスト |
- | \begin{itemize} | \end{itemize} | 番号なしリスト |
|a|b| | \begin{table} | \end{table} | 表組み |
#ref(ファイル名) | \begin{figure} | \end{figure} | 図の挿入 |
【 】 | \label{} | なし | ラベル |
【 【 】 】 | \ref{} | なし | 参照 |
文頭に半角スペース | \begin{abstract} | \end{abstract} | 内容梗概 |
#contents | \maketitle | なし | 目次 |
---- | \appendix | なし | 付録 |
CENTER:""タイトル"" | \title | なし | タイトル |
PukiWikiでのプレビュー時に、Webブラウザ上に表示される文章やレイアウトを見ることで、PDFファイルのレイアウトをイメージできるようにした。
LaTeXには「章立て(\chapter)」や「見出し(\section)」という命令がある。しかし、PukiWiki記法には「章立て」はなく「見出し(*)」しかない。PukiWiki上では「*」を使用しなければプレビュー時に目次に表示されない為、見出しと章立てを「*」を用いた記述方法にした。しかし、PukiWiki記法では「***(LaTeXでいう\subsubsection)」までしか対応されていない。そのため、「****」とは、記述することができない。そこで、文頭に「*~」と記述すると「章立て」とし、「見出し(*)」部分と区別するようにした(図【【chapsec】】参照)。
PukiWikiには文章や画像・表などにラベルを付け、参照するという記述法はなく、それぞれにアンカーやリンクを付けるといった命令しかない。 対照できない場合は、PukiWikiのページ上や文章中に存在しても違和感がなく、かつ、文章作成中に使用しない記号を使用する必要があった。 今回は、ラベル(\label)の代わりにすみつきカッコ(【 】)と参照(\ref)の代わりに(【 【 】 】)を用いた(図【【labref】】参照)。
図を挿入する際には、一度PukiWiki上に画像ファイルをアップロードし、(#ref(画像ファイル名),図の位置)と記述するとPukiWiki上に図が表示される。PukiWikiではファイル名がその図の表示名になってしまうため、表示名を出力する命令を考え実装した(図【【ref1】】参照)。画像が表示できるのは拡張子が(*.jpg)や(*.png)のファイルで、(*.eps)についてはファイル名のみが表示され、クリックすることで表示することが可能である。アップロード可能最大ファイルサイズは1,024KBである。
LaTeXの命令へ変換しPDFにする場合にはTeXファイル(*.tex)と同じフォルダ内に画像ファイルを挿入しておく必要がある。
図【【ref1】】中の数字の説明は、1がPukiwikiでの図を挿入する命令。2で図の下部に表示名とラベルを表示している。
表を挿入する際、PukiWikiでは非常に直感的な記述が可能である。しかし、通常の記述方法では、図と同様に、表示名やラベルを記述することが出来ないため、表示名とラベルの記述方法を考え実装した(図【【tab1】】)。 図【【tab1】】中の数字は、1がPukiwikiで表を挿入する命令。2で表の上部のタイトルとラベルを表示している。
論文には、タイトルや著者名、日付が必要である。他にも、卒業論文では、学籍番号や指導教員名、所属学科などを記述する必要がある。タイトルは最上の中央部に太字で出力し、日付はPukiWiki記法で標準で扱えるものを使用する。著者名や学籍番号等の記述方式は似せるようにした(図【【title】】)。
PukiWiki記法を、LaTeXの命令へ変換するプログラムを、Perl言語を用いて作成した。下記はPukiWiki記法で箇条書きを使用した際に、変換プログラムが行う処理である。
この処理を行った際の、変換前(PukiWiki)と変換後(LaTeX)の比較を図【【item】】に示す。
LaTeX側で複数行に渡り記述する命令については、このような処理をベースとしている。
その他、タイトル(\title)や目次(\tableofcontents)等、一行で判別が可能な命令については、文頭や文中に特定の文字や記号が存在した際に、LaTeXの命令に変換している。
LaTeXでの図の挿入時には、図を表示させる、図の場所を指定する、図のタイトルを出力する命令、場合によってラベルを付与する必要がある。 PukiWikiでの入力(図【【lab1】】)をLaTeXの命令(図【【lab2】】)へあてはめていく処理を行っている。
図【【lab1】】と図【【lab2】】中の数字は、1がファイル名、2が図を表示する位置、3が図のタイトル、4がラベルとなっている。
LaTeXで表の挿入を行う場合も、図の挿入のように複雑である。表をどの位置に出力するか、表中の要素の位置指定、表のタイトルを出力、ラベルを付与させるなどの命令が必要である。
PukiWiki記法では、各要素の位置指定を一つずつしなければならない。しかし、LaTeXの命令では列ごとに要素の位置指定が可能である。そのため、PukiWikiで表の一行目に記述した位置指定を、変換後にはそれぞれの列の位置指定としている(図【【table1】】、図【【table2】】参照)。
PukiWikiでは、ページ更新をした際に、見出し(*)を使用した文末にアンカーが付属してしまう(図【【ancer】】参照)。アンカーを放置したまま、LaTeX形式に変換しターミナルなどでコンパイルをするとエラーが出てしまうため、LaTeX形式に変換する際にそのアンカーを削除する必要があった。文章作成時にアンカーのような文章を記述してしまうと、アンカーと同様に削除してしまう恐れがあったため、文頭が「*」で文末に特定の文字列が存在した場合のみ、アンカーを削除するようにした(図【【texanc】】参照)。
LaTeXは、「プリアンブル」をテキストファイルに記述しなければコンパイルすることが出来ない。そのため、今回は卒業論文で使用するプリアンブルを変換プログラムにかけた際に、自動で付与している(図【【puri】】参照)。その際に\begin{document}も一緒に付与し、\end{document}は文章の最後に付与している。これによりコンパイル処理が可能になる。
論文を印刷した際に、表紙やページ番号がついていないと非常に見にくくなってしまう。しかし、PukiWiki記法はWebページを作成する言語であるため、表紙やページ番号を付与させるような命令はない。そのため、LaTeXの命令に変換した際に、特定の命令の前後にページ番号などの命令を付与させるようにした(図【【pagenumber】】参照)。
しかし、プログラムが自動的に決められたページ番号を出力するため、現在はページ番号の書式の設定などはできていない。
LaTeXは、作成した文章をコマンドを実行するなどをして、コンパイル処理をしなければPDFファイルなどの出力結果が得られない。PukiWikiでは、コンパイル作業をせずに出力結果を表示することができるが、PDFファイルを作成することはできない。PDFファイルを作成するためには、PukiWiki記法を用いて作成した文章を、LaTeX形式に変換しなければコンパイル処理が可能な形式にならない。PukiWiki記法をLaTeX形式に変換し、コンパイル作業を行いPDFファイルを作成する。これらの作業を自動化する。
ページ更新ボタンを押した際に、Pukiwikiで編集している文章を、LaTeX形式の文章へ変換し、そのLaTeX形式の文章をコンパイル処理することでPDFファイルになる。そのPDFファイルを保存する。 その提案を実現するために、シェルスクリプトを用いてプログラムを作成する。
自動化を行うために、rsyncコマンドと「a」オプションを使うにより、タイムスタンプを保持したまま、変更されたファイルのみをコピーすることができる。このコマンドを用いて、サーバ内に存在するPukiWikiのWikiディレクトリを、タイムスタンプを保持したまま、変更されたファイルのみをコピーする。タイムスタンプが更新されてしまうと、タイムスタンプの比較が正常にできなくなってしまう。
その後、値リストをひとつずつ見ていき、「ファイル名.txt」が「ファイル名.tex」より新しくなっていた場合は、「ファイル名.txt」を変換プログラムにかけ、LaTeX命令へ変換し、「ファイル名.tex」へ書き込む。platexでtexファイルを2回コンパイル処理し、エラーが出た際には強制終了、エラーが出なければdvipdfmxでコンパイル処理を行いPDFファイルを作成する。以上の作業を30秒ごとに行う。
この処理をフローチャートに示したものが図【【flow】】である。
本研究では、Wikiで記述する方式の卒業論文作成システムを作成した。作成したシステムを扱い、本論文を作成した。Webブラウザに表示される文章やレイアウトを、PDFでの出力と似せることで、出力結果をイメージできるようにした。また、ユーザがコンパイル作業を行わなくとも、PDFファイルが作成されるようになったため、コンパイル作業を行う手間を省けたのではないかと考える。
今後の課題として以下が挙げられる。
課題に対する解決策として、作成した変換プログラムの見直しが必要である。数式対応については、PukiWikiにプラグインを導入し、そのための変換プログラムを作成することで解決可能であると考える。スクロールや行番号問題に対しては、PukiWikiを改良しなければならない可能性が高いので検討する必要がある。PDFのファイル名については、文字解析を行い、正確な名称に変換する必要があり、これはシェルスクリプトのプログラムを改良することで、解決可能だと考える。
本研究では、Wiki形式で記述する方式の卒業論文作成システムの提案した。
Pukiwiki記法を用いて作成した文章を、LaTeX形式へ変換するプログラムを作成した。また、PukiWikiで文章を保存することで、PDFファイルを作成するプログラムを実装した。
その結果、自身でコンパイル作業を行なわずにPDFファイルを作成することが可能になった。
本研究で作成したシステムでは、本学科指定の卒業論文を作成することができる。
今回、本論文をこのシステムで作成するにあたり、使用できない命令や、細かい指定が出来ない等の課題を発見することが出来た。
今後は、発見した課題を解決していきたい。そして、このシステムが論文作成の際にユーザにかかる負担を軽減できるのか検証を行いたい。
本研究、本論文を終えるにあたり、多大なる御指導、御教授を頂いた兼宗進教授に深く感謝いたします。
また、学生生活における基礎的な学問、学問に取り組む姿勢をご教授頂いた、メディアコンピュータシステム学科の先生方に深く感謝致します。
また、本研究を進めるにあたり御教授いただきました、下倉雅行先生に深く感謝致します。
本研究期間中、本研究に対する貴重な御意見、御協力を頂きました島袋舞子氏に感謝致します。そして、卒業研究に共に励んだ兼宗研究室メンバー一同に感謝します。
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";