名前:小林 大輔
学生番号:HT12A038
日付:2024-11-24
指導教員:兼宗 進
年度:2014
所属:総合情報学部 メディアコンピュータシステム学科
論文執筆等の文章作成を行う時に使用するソフトの一つに、LaTeXというソフトある。このソフトは、各自が様々なエディタを用いてLaTeXの命令や文章を書き、LaTeXを実行してPDFファイルを得るという方法である。しかし、初学者がLaTeXの命令を、参考書やWebサイト等で調べながら、文章やPDFファイルを作成するのは、文章作成自体に集中できず、文章作成以外に労力を取られてしまう。
そこで今回、論文作成時に必要である命令を直感的に記述するための提案をする。提案を実現する為にPukiwikiを用いた。Pukiwikiとは、Webブラウザ上で記法や文章を入力し、プレビューボタンを押すだけで出力結果を見ることが可能なシステムである。記法も直感的に記述することが出来る為、本研究ではPukiwikiを用いた。
Pukiwikiの記法とLaTeXの命令の対照表を作成し、その表を元にプログラムを作成した。その際、Pukiwikiと対照できない命令が存在した為、自身で考え対応させた。対応時にはプレビューした際に、完成時のイメージが掴めるように行った。
結果、プレビューボタンで完成時のイメージが掴める様になり、文章作成への集中が向上したのではないかと考える。
論文作成 LaTeX Pukiwiki
文章を作成するための言語には、「視覚マークアップ言語」や「手続きマークアップ言語」がある。 上記の言語を用いたソフトには「Microsoft Word」や「Open Office Writer」や「LaTeX」などがあるが、論文作成には主に「LaTeX」というソフトを用いることが多い。
LaTeXは、ユーザが様々なエディタにLaTeXの命令や本文を記述し、コマンドプロンプトなどを用いてコンパイルし、PDFファイルを得る事が可能である。数式を扱うのに長けており、複雑な数式を美しく記述可能であるのが特徴である。そのため、理系の文章作成において重宝されている。
本学科の卒業論文作成にもLaTeXを使用している。しかし、LaTeXの命令には複雑なものが多く、初学者が扱う際にはLaTeXの命令を参考書やインターネットなどで調べながら、文章を書かなければならない。文章の内容を考え、何十ページも記述しなければならない卒業論文の際に、命令についての調べ作業をしてしまうと、文章作成のみに集中できないのではないかと考えた。
そこで今回、事項が直感的に記述可能で、プレビューボタンを押すだけで出力結果が見れる、Pukiwikiに着目した。
本研究では論文作成において必要であるLaTeXの命令と、Pukiwikiの事項を対応させることで、ユーザへの入力負担を軽減できるのではないかと考え、Pukiwiki記法をTeX形式の命令へ変換するプログラムを作成した。
現在、文章作成ソフトには「Microsoft Word」、「Open Office Writer」、「LaTeX」等があり、それぞれのソフトが一長一短である。
入力した内容、画面に出力されている内容と、印刷した時の出力が一致する。数式が綺麗に出力できる。文章作成時に、レイアウトに気を遣ったり、命令を調べながらでないと文章を作成できない、等の特徴がある。
例えば、テキストファイルの文書のタイトルの前にいくつか改行やスペースを入れることで、行送りの調整や中央寄せを暗示させている。
図や表を入れ替えた際に、番号を振り直す必要が生じることや、全体的に構成を変更した際に目次も変更しなければならない等、課題がある。
これらの作業は、ユーザが入力した内容、つまり画面に出力される内容が印刷などの出力と一致するという利点がある。これはユーザにとってわかりやすい仕様であるが、ユーザーがすべてのレイアウト作業を行わなければいけない為、執筆以外にも労力が必要となる。
上記の特徴がある。
上記の特徴がある。
書式を整えるために、書式指定の命令を文章の直前に並べ、中央揃えモードに移る、書体 を大きくさせる、などの指示を出す。文章の後には、それらの効果を打ち消す命令が並ぶ、という言語である。出力した際には非常に整っていて見やすい。しかし、命令が複雑な為、記述は容易ではない。
上記の特徴がある。
吉井了平(関西学院大学)
LaTeXで文章作成する際に必要で、頻出する命令を、PHP言語で動作するWikiの一種である、Pukiwikiの記法と、その他に自身で設定した記号に置き換えることにより、LaTeX命令の入力作業の軽減を実現している(図【【wiki2tex】】)。
PukiWiki記法をTeX命令へ変換するために既存のフィルターである「pukipa.rb」を改良している。「pukipa.rb」とは、Pukiwikiの独自文法をHTMLに変換するプログラムである。HTMLに出力する部分をそれぞれに対応するLaTeX命令へ変更している。
この研究では頻出する命令のみに対応している。しかし、表や図など対応していない命令がある。
本学科の卒業論文の執筆方法は、各自様々なエディタを用いて、LaTeXの命令や本文を記述し、コマンドプロンプトなどを用いてコンパイルし、PDFファイルを得るという方法である。
一般的な論文を作成する際には以下の命令が必要である。
下記は本学の卒業論文に必要である命令である。
上記のLaTeXの命令には複雑なものが多く、初学者が扱う際にはLaTeXの命令を参考書やインターネットなどで調べながら、本文を書かなければならない。そのため、文章作成のみに集中できないのではないかと考える。
そこで、Pukiwiki記法でLaTeXのように文章作成をすることが出来ないか、と考えた。
先行研究では、Pukiwiki記法をLaTeX命令に変換し、入力作業の軽減を実現しているが、図や表などの命令には未対応である。
本研究では、Pukiwiki記法で作成した文章を変換し、拡張子を変更、その後コンパイルするだけで、PDFファイルにできることを目標にした。
Pukiwikiを使用する利点としては、記法を直感的に記述することが可能で、プレビューボタンを押すだけで出力結果が見れる点である。
従来のLaTeXでの論文作成方法は、図【【tex】】のように命令と文章を組み合わせ行う。しかし、記述する命令が複雑である。
今回、提案する方法は図【【wiki1】】と図【【wiki2】】のように、Webブラウザ上でPukiwikiで編集やプレビューを行いながら論文を作成する方法である。
上記の流れを図に示したものが図【【activity】】である。
本研究でPukiwikiを扱う利点としては、記法が直感的に記述することが出来る、プレビューボタンを押すだけで出力結果が見れる、という点である。しかし、PukiwikiとLaTeXではそれぞれ利用目的が違うため、必ず記法と命令が対照するとは限らない。今回はそれぞれの対照から行った。
まず、LaTeXで文章作成を行う際に頻出する命令をリストアップしPukiwiki記法との対照表を作成した。 一部を、表【【lists】】に示す。
Pukiwiki記法 | LaTeX命令(始まり) | LaTeX命令(終わり) | 意味 |
* | \section | / | 見出し |
+ | \begin{enumerate} | \end{enumerate} | 番号付リスト |
- | \begin{itemize} | \end{itemize} | 番号なしリスト |
|a|b| | \begin{table} | \end{table} | 表組み |
#ref(ファイル名) | \begin{figure} | \begin{figure} | 図 |
LaTeXに存在し、Pukiwikiに存在しない記法については、それぞれのの意味が異なる場合でも対応させている。Pukiwikiでのプレビュー時に、文章やレイアウトを見ることでPDFをイメージ出来るように対応している。
LaTeXには「章立て(\chapter)」や「見出し(\section)」という命令がある。しかし、Pukiwiki記法には「章立て」はなく「見出し(*)」しかない。Pukiwiki上では「*」を使用しなければプレビュー時に目次に表示されない為、見出しと章立てを「*」を用いた記述方法にした。しかし、Pukiwiki記法では「***(LaTeXでいう\subsubsection)」までしか対応されていない。そのため、文頭に「*~」と記述すると「章立て」とし、「見出し(*)」部分と区別するようにした(図【【chapsec】】参照)。
Pukiwkiには文章や画像・表などにラベルを付け、参照するという記述法はなく、それぞれにアンカーやリンクを付けるといった事項しかない。 対照できない場合は、Pukiwikiのページ上・文章中に存在しても違和感がなく、かつ、文章作成中に使用しない記号を使用する必要があった。 今回、ラベル(\label)と参照(\ref)には、すみつきカッコ(【 】)を用いた(図【【labref】】参照)。
図を挿入する際には、一度Pukiwiki上にアップロードし(#ref(画像ファイル名),図の位置)と記述するとPukiwiki上に図が表示される。LaTeX命令へ変換しPDFにする場合にはTeXファイル(*.tex)と同じフォルダ内に画像ファイルを挿入しておく必要がある。
Pukiwikiではファイル名がその図の表示名になってしまう為、表示名を出力する命令を自身で考え追加した(図【【ref1】】参照)。 図【【ref1】】中の数字の説明として、1がPukiwikiでの図を挿入する命令。2で図の下部に表示名とラベルを表示させている。
表を挿入する際、Pukiwikiでは非常に直感的な記述が可能である。しかし、通常の記述方法では、図と同様に、表示名やラベルを記述することが出来ない為、表示名とラベルの記述方法を考え追加した(図【【tab1】】)。 図【【tab1】】中の解説として、1がPukiwikiで表を挿入する命令。2で図のタイトルを図の上部に表示する。命令となっている
論文には、タイトルや著者名や日付が必要である。他にも、卒業論文では、学生番号や指導教員名、所属学科などを記述する必要がある。タイトルは最上の中央部に太字で出力し、日付はPukiwikiが標準で扱えるものを使用する。それら以外の記述方式は似せるようにした(図【【title】】)。
下記は箇条書きのプログラムの処理方法である。
LaTeX側で複数行に渡り記述する命令についてはこのような処理方法を行っている。
その他、タイトル(\title)や目次(\tableofcontents)等、一行で判別が可能な命令については、文頭や文中に特定の項目がが存在した際に、LaTeXの命令に変換している
LaTeXでの図の換入の命令は複雑である。図を表示させる、図の場所を指定する、図のタイトルを出力する命令、場合によってラベルを付与する必要がある。
Pukiwikiでの入力(図【【lab1】】)をTeX命令(【【lab2】】)へ当てはめていく処理を行っている。
LaTeXで行う表の挿入も、図の挿入のように複雑であり、表をどの位置に出力するか、表中の要素の位置指定、表のタイトルを出力、ラベルを付与させるなどの命令が必要である。
Pukiwikiでは、各要素の位置指定を一つずつしなければならない。しかし、LaTeX命令では列ごとに要素の位置指定が可能である。そのため、Pukiwikiで表の一行目に記述した位置指定を、変換後にはそれぞれの列の位置指定としている(図【【table1】】、図【【table2】】参照)。
Pukiwikiではページ更新をした際に、見出し(*)を使用した際にアンカーが付属してしまう(図【【ancer】】参照)。アンカーを放置したままTeX形式に変換しターミナルなどでコンパイルするとエラーが出てしまうため、TeX形式へ変換する際にそのアンカーを削除する必要があった。文章作成時にアンカーのような文章を記述してしまうと、アンカーと同様に削除してしまう恐れがあった為、文頭が「*」で文末に特定の文字列が存在した場合のみアンカーを削除するようにした(図【【texanc】】参照)。
LaTeXは「プリアンブル」をテキストファイルに記述しなければコンパイルすることが出来ない。そのため、今回は卒業論文で使用するプリアンブルを変換プログラムにかけた際に自動で付与している(図【【puri】】参照)。その際に\begin{document}も一緒に付与し、\end{document}は文章の最後に付与している。これによりコンパイルが可能になる。
論文を印刷した際に、表紙やページ番号がついていないと非常に見にくくなってしまう。しかしPukiwiki記法はWebページを作成する言語であるため、表紙やページ番号を付与させるような事項はない。そのため、LaTeX命令に変換した際に特定の命令の前後にページ番号などの命令を付与させるようにした。概要を記述すると、表紙と概要ページのページ番号を出力する命令を付与する。目次を記述すると、目次以下のページ番号を決められた書式で出力する命令を付与する(図【【pagenumber】】参照)。
しかし、プログラムが自動的に決められたページ番号を出力するようにした為、現在はページ番号の書式の設定などは出来ていない。
PDFファイルにする際に、Pukiwikiで編集した文章を、テキストファイルにコピーし、変換し、コンパイルしてPDFファイルにする。このような作業を行うと、時間や手間がかかるたため、ユーザに負担がかかってしまう。そのため、コピー、変換、コンパイルなどの作業を省略できないかと考えた。Pukiwikiで記述した文章を、ページ更新ボタンを押すだけでPDFファイルに出来ないかと考えた。
まず、Pukiwikiで編集しているテキストファイルをサーバー上で、LaTeX命令へ変換、その後コンパイルできないか、と考えたが、筆者が使用しているPukiwikiが存在しているサーバーではLaTeXが動作しなかった。外部のサーバーで動作させてしまうと、サーバー移動の際にユーザに負担がかかってしまう。
そこで、ページ更新ボタンを押した際に、Pukiwikiで編集している文章がLaTeX命令へ変換され、コンパイルしPDFになりDropbox内のフォルダに更新できないか、と考えた。
本研究室では卒業研究や卒業論文執筆についての作業はDropboxを用いて行っているため、自身でサーバーにアクセスするより、自動的に自身のPCに同期されるDropboxの方が便利だと考え、提案を実現するためのプログラム作成を行った。
プログラムはシェルスクリプトを用いて作成した。
まず、自動化を行うためにLaTeXをコンパイルするために用いるディレクトリの中身と、文章作成を行っているPukiwikiのページのディレクトリのバックアップを行う。この処理を、シェルスクリプトのrsyncを用いて行う。
本研究で作成したPukiwiki記法をTeX命令へ変換するsample.plと、それを複製したw2t.plを用意する。Pukiwikiで更新ボタンが押された際に、sample.plが更新されているかチェックし、構文エラーが無ければ、w2t.plと見比べ、sample.plがw2t.plより新しくなっている場合、sample.plの文字コードを変更しw2t.plへ書き換える。
その後、Pukiwikiで文章作成の際に更新されているファイルと、Dropbox内に存在する同名称のファイルを見比べ、テキストファイルの方が新しい場合、そのテキストファイルを変換プログラムでLaTeX形式に変換しtexファイルへ書き換える。その後、2回コンパイルを行う。その際にエラーが出現した場合は、コンパイルを中止。エラーが出現しない場合はPDFファイルを生成する。上記の作業を30秒ごとに行う。
#ref(): File not found: "flow.png" at page "ht12a038"
筆者自身がPukiwikiを用いて卒業論文を作成した。本論文が本研究の成果である。
本研究ではPukiwikiを用いてその編集画面でPukiwiki記法を用いて文章を作成した。文章作成に対する集中は向上したのではないかと考える。
本論文をPukiwikiを用いて作成した。それにより課題を発見することが出来た。
課題の一部の問題に対する改良案として、作成したプログラムの見直しが必要であると考える。
スクロールや行番号問題に対してはPukiwiki自体のプログラムを変更することで解決可能ではないかと考える。
本研究ではPukiwiki記法を用いて文章を作成し、その文章をTeX命令へ変換するプログラムを作成した。
これにより、命令を直感的に記述することが可能になり、文章作成の際にユーザにかかる負担を軽減することが出来た。
今回、本論文をPukiwikiで作成するにあたり、課題を発見することが出来た。
本研究、本論文を終えるにあたり、御指導・御教授を頂いた兼宗進教授に深く感謝いたします。
また、学生生活における基礎的な学問、学問に取り組む姿勢をご教授頂いた、メディアコンピュータシステム学科の先生方に深く感謝致します。
本研究期間中、本研究に対する貴重な御意見、御協力を頂きました島袋舞子氏に心から感謝致します。そして、卒業研究に共に励んだ兼宗研究室メンバー一同にも深く感謝します。
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/^指導教員: *(.*)/\\指導教員\{\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(/^所属:/){ 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";