CENTER:''Wikiで記述する方式の卒業論文作成システムの提案'' 名前:小林 大輔 学籍番号:HT12A038 日付:&_date; 指導教員:兼宗 進 年度:2014 所属:総合情報学部 メディアコンピュータシステム学科 本研究では、Wikiで記述する方式の論文作成システムの提案を行う。論文執筆を行う際に使用するソフトウェアのひとつとして、LaTeXというものがある。これは、ユーザが様々なエディタに命令や文章を記述し、コンパイルをすることで出力結果を見ることができる。しかし、LaTeXの命令は独特で複雑なため、これを初学者が用いて論文執筆を行うことは困難である。そこで、ボタンひとつで出力結果を見ることが可能で、記法が単純に記述可能なPukiwikiを用いることで、LaTeX形式の論文作成に取り組めるシステムを提案する。 >LaTeX PukiWiki #contents *~はじめに 【chap1】 [#kdef7ab8] 文章を作成するためのソフトウェアには「Microsoft Word」や「Open Office Writer」や「LaTeX」等がある。 上記に記述したソフトウェア以外にも、様々な文章作成ソフトウェアが存在するが、論文作成には主にLaTeXを用いられることが多い。 LaTeXは、ユーザがTeXmakerやEmacs等のエディタにLaTeXの命令や本文を記述したあと、コマンドプロンプトなどを用いてコンパイルし、PDFファイル等の閲覧用ファイルを取得することが可能。数式を扱うのに長けており、複雑な数式を美しく出力することができる。そのため、理系の文章作成において用いられることが多い。 本学科の卒業論文作成にもLaTeXを使用することが定められている。しかし、LaTeXの命令には複雑なものが多く、初学者が扱う際には、LaTeXの命令を参考書やインターネットなどで調べながら、文章を書かなければならない。卒業論文を書く場合、文章の内容を考え、何十ページも記述しなければならない、それに加えて、命令についての調べ作業を行うと、文章作成のみに集中できないと考えた。 そこで、本研究では、LaTeXのような複雑な命令を記述しなくても、LaTeX形式の論文作成に取り組めるシステムを提案する。Webブラウザ上で、論文作成を行えるようにすることで、環境設定の手間を省く。提案したシステムで、記述した文章を保存すると、PDFファイルを得ることも可能にした。 本論文では次のような構成にした。第【【chap2】】章では、様々なソフトウェアの説明を述べる。第【【chap3】】章では、本学科での論文執筆方法と、本研究で提案する方法について述べる。第【【chap4】】章では、論文作成システムの実装について述べる。第【【chap5】】章では、本研究に対するまとめと考察を述べる。 *~様々な文章作成ソフトウェア 【chap2】 [#rff8ec2b] *Microsoft Word [#f95539a6] Microsoft社が、WindowsおよびMac OS向けに発売している文章作成ソフトウェアである。ボタンひとつで、文字を中央に寄せたり、文字のサイズや書式を変更できる。文字や図や表の配置の自由度が高い。 といった特徴がある。 #ref(word1.png,center) CENTER:(Microsoft Word,【word】) *Open Office Writer [#sd1fb0da] オープンソースで開発されたフリーの統合オフィスソフト「OpenOffice.org」の内のひとつ。誰でも無料で利用できる。基本的な画面や操作方法は「Word」と似ている。しかし、文字を線で囲んだり、表のセルに斜線を引く等の機能にはサポートしてない。 といったような特徴がある。 #ref(writer1.png,center) CENTER:(Open Office Writer,【word】) *LaTeX [#ndcbc411] LaTeXとは、TeXにパッケージを組み込むことで構築されている。ソースコードを作成し、コンパイルを行うことで初めてDVIやPDFなどの閲覧用のファイルを得ることが可能である。数式を綺麗に出力することが可能。しかし、コンパイルを行わないと、どのような出力がえられるかが分かりにくい。また、記述する際には多くの命令が必要とるが、命令が複雑である。 *PukiWiki [#ra4f2b88] PukiWikiとは、独自の記法であるPukiwiki記法や文章を記述すること、でWebページの作成や変更が可能。プレビューを行うことで、出力結果をすぐに見れる。また、プラグインを導入することで、様々な機能を拡張して利用できる。 といった特徴がある。 *先行研究 [#ce177b82] 先行研究として、関西学院大学の吉井了平氏が行った「Wiki2LaTeXフィルターの開発」がある。 この研究では、LaTeXで文章作成する際に頻出する命令を、PukiWikiの記法と、その他に自身で設定した記号に置き換えている。それにより、LaTeX命令の入力作業の軽減を実現している(図【【wiki2tex】】)。 PukiWiki記法をLaTeXmp命令へ変換するために、既存のフィルターである「pukipa.rb」を改良している。「pukipa.rb」とは、Pukiwikiの独自文法をHTMLに変換するプログラムである。HTMLに出力する部分をそれぞれに対応するLaTeX命令へ変更している。PukiWiki記法を用いて作成した文章を、フィルターにかけることでLaTeXの命令へ変換している。 この研究では頻出する命令のみに対応している。しかし、表や図など対応していない命令があるため、実際に論文を作成することはできない。 #ref(wiki2tex2.png,center) CENTER:(先行研究での執筆方法の比較,【wiki2tex】) *~本学科の論文執筆方法と提案する方法 【chap3】 [#b51a51eb] *本学科の論文執筆方法 [#i6dee2cf] 本学科の卒業論文の執筆には、LaTeXを扱っている。 以下の項目や命令が必要である。 -タイトル -著者 -日付け -概要 -目次 -章立て -表紙 -ラベル -参照 -文字のセンタリング -付録 -改行 -コメントアウト -ページ番号の設定 下記は本学科の卒業論文に必要である命令である。 -学籍番号 -指導教員 -年度 -所属学部学科 -ノンブルを算用数字に変更 *提案する方法 [#e784ced6] LaTeXは、ダウンロードし、エディタに複雑な命令を入力し文章を作成しなければならない。先行研究では、LaTeXの命令に対する入力作業の軽減を実現しユーザの負担は軽減しているが、このシステムのみでは、LaTeXの命令を記述せず論文を作成することはできない。 そこで -ダウンロードが不要なWebを用いる -LaTeXのような複雑な命令を使用しない -1つのシステムのみでPDFファイルを作成することが出来る 上記のような機能がある、論文作成システムの実装を提案をする。 従来の論文作成方法と今回提案する論文作成方法を図【【texwiki】】に示す。 #ref(texwiki.png,center) CENTER:(従来の方法と今回の提案,【texwiki】) *~研究内容 【chap4】 [#a8a88a9d] *動作方法 [#bdc106ee] +Webブラウザ上でPukiWikiを用いてプレビューを行いながら文章を記述する +文章をテキストエディタへコピー&ペーストする +Pukiwiki記法で作成された文章を、今回作成したプログラムにかける +出力された文章ファイルの拡張子を(.tex)へ変更する +ターミナルなどを用いてコンパイルしPDFファイルにする 上記の流れを図に示したものが図【【activity】】である。 #ref(activity.png,center) CENTER:(動作方法,【activity】) *対応方法 [#ye0d098c] 本研究でPukiwikiを扱う利点としては、記法が直感的に記述することが出来る、プレビューボタンを押すだけで出力結果が見れる、という点である。しかし、PukiwikiとLaTeXではそれぞれ利用目的が違うため、必ず記法と命令が対照するとは限らない。今回はそれぞれの対照から行い、対応付けをした。 まず、LaTeXで文章作成を行う際に頻出する命令をリストアップし、Pukiwiki記法との対照表を作成した。 その一部を、表【【lists】】に示す。 CENTER:(対照表,【lists】) |LEFT:Pukiwiki記法|LEFT:LaTeX命令(始まり)|LEFT:LaTeX命令(終わり)|LEFT:意味| |LEFT:'''*'''|LEFT:'''\section'''|LEFT:なし|LEFT:見出し| |LEFT:'''+'''|LEFT:'''\begin{enumerate}'''|LEFT:'''\end{enumerate}'''|LEFT:番号付リスト| |LEFT:'''-'''|LEFT:'''\begin{itemize}'''|LEFT:'''\end{itemize}'''|LEFT:番号なしリスト| |LEFT:|a|b||LEFT:'''\begin{table}'''|LEFT:'''\end{table}'''|LEFT:表組み| |LEFT:'''#ref'''(ファイル名)|LEFT:'''\begin{figure}'''|LEFT:'''\end{figure}'''|LEFT:図| LaTeXの命令に存在し、Pukiwiki記法に存在しないものについては、それぞれの意味が異なる場合でも対応させている。例えば、LaTeXには概要('''{abstract}''')という命令があるが、PukiWikiにはそのような記法はない。そのため、文頭に半角スペースを入力することで概要を暗示させる。PukiWikiでのプレビュー時に、文章やレイアウトを見ることでPDFのイメージが出来るように対応した。 **章立て [#sa221d8e] LaTeXには「章立て('''\chapter''')」や「見出し('''\section''')」という命令がある。しかし、Pukiwiki記法には「章立て」はなく「見出し(*)」しかない。Pukiwiki上では「*」を使用しなければプレビュー時に目次に表示されない為、見出しと章立てを「*」を用いた記述方法にした。しかし、Pukiwiki記法では「***(LaTeXでいう'''\subsubsection''')」までしか対応されていない。そのため、文頭に「'''*~'''」と記述すると「章立て」とし、「見出し(*)」部分と区別するようにした(図【【chapsec】】参照)。 #ref(chapsec.png,center) CENTER:(編集画面とプレビュー,【chapsec】) **ラベルと参照 [#jec6f048] Pukiwkiには文章や画像・表などにラベルを付け、参照するという記述法はなく、それぞれにアンカーやリンクを付けるといった命令しかない。 対照できない場合は、Pukiwikiのページ上や文章中に存在しても違和感がなく、かつ、文章作成中に使用しない記号を使用する必要があった。 今回、ラベル('''\label''')と参照('''\ref''')には、すみつきカッコ('''【''' '''】''')を用いた(図【【labref】】参照)。 #ref(labref.png,center) CENTER:(Pukiwiki上でのラベルと参照,【labref】) **図の挿入 [#uc15a163] 図を挿入する際には、一度Pukiwiki上に画像ファイルをアップロードし、('''#'''ref(画像ファイル名),図の位置)と記述するとPukiwiki上に図が表示される。Pukiwikiではファイル名がその図の表示名になってしまうため、表示名を出力する命令を本研究で考え実装した(図【【ref1】】参照)。(*jpg)や(*.png)のファイルは画像が表示される。(*.eps)についてはファイル名のみが表示され、クリックすることで表示することが可能である。アップロード可能最大ファイルサイズは1,024KBである。 LaTeX命令へ変換しPDFにする場合にはTeXファイル(*.tex)と同じフォルダ内に画像ファイルを挿入しておく必要がある。 図【【ref1】】中の数字の説明は、1がPukiwikiでの図を挿入する命令。2で図の下部に表示名とラベルを表示している。 #ref(wikiref3.png,center) CENTER:(図の挿入,【ref1】) **表の挿入 [#cd8d7329] 表を挿入する際、Pukiwikiでは非常に直感的な記述が可能である。しかし、通常の記述方法では、図と同様に、表示名やラベルを記述することが出来ない為、表示名とラベルの記述方法を考え実装した(図【【tab1】】)。 図【【tab1】】中の数字は、1がPukiwikiで表を挿入する命令。2で表の上部のタイトルとラベルを表示している。 #ref(tab2.png,center) CENTER:(表の挿入,【tab1】) **タイトルなど表紙に記述する内容 [#jb2fb2ba] 論文には、タイトルや著者名や日付が必要である。他にも、卒業論文では、学籍番号や指導教員名、所属学科などを記述する必要がある。タイトルは最上の中央部に太字で出力し、日付はPukiwikiが標準で扱えるものを使用する。著者名や学籍番号等の、記述方式は似せるようにした(図【【title】】)。 #ref(title2.png,center) CENTER:(表紙に記述する文章,【title】) *プログラムの処理 [#xcb81867] **主なプログラムの処理方法 [#ied52cf1] プログラムはPerlを用いて作成した。 下記はPukiwikiで箇条書きを使用した際に、プログラムが行う処理である。 + 文頭の記号を判別し、変数の値が0の場合、'''\begin{itemize}'''を出力する + 文頭の記号を'''\item'''へ変換し、変数の値を+1する + 文頭に対応する記号が無い行、かつ変数の値が0以上であれば'''\end{itemize}'''を出力し変数の値を0にする この処理を行った際の、変換前(Pukiwiki)と変換後(LaTeX)の比較を図【【item】】に示す。 LaTeX側で複数行に渡り記述する命令については、このような処理をベースとしている。 #ref(itempl.png,center) CENTER:(箇条書きの変換前と変換後の比較,【item】) その他、タイトル('''\title''')や目次('''\tableofcontents''')等、一行で判別が可能な命令については、文頭や文中に特定の文字や記号が存在した際に、LaTeXの命令に変換している。 **図の挿入 [#w618d4ad] LaTeXでの、図の挿入の命令は複雑である。図を表示させる、図の場所を指定する、図のタイトルを出力する命令、場合によってラベルを付与する必要がある。 Pukiwikiでの入力(図【【lab1】】)をLaTeXの命令(【【lab2】】)へあてはめていく処理を行っている。 図【【lab1】】と図【【lab2】】中の数字は、1がファイル名。2が図を表示する位置。3が図のタイトル。4がラベル。となっている。 #ref(labnew.png,center) CENTER:(Pukiwikiでの図の表示,【lab1】) #ref(labnew1.png,center) CENTER:(TeX命令へ変換後,【lab2】) **表の挿入 [#fbe9d70b] LaTeXで表の挿入を行う場合も、図の挿入のように複雑である。表をどの位置に出力するか、表中の要素の位置指定、表のタイトルを出力、ラベルを付与させるなどの命令が必要である。 Pukiwikiでは、各要素の位置指定を一つずつしなければならない。しかし、LaTeXの命令では列ごとに要素の位置指定が可能である。そのため、Pukiwikiで表の一行目に記述した位置指定を、変換後にはそれぞれの列の位置指定としている(図【【table1】】、図【【table2】】参照)。 #ref(table1.png,center) CENTER:(表の挿入(変換前),【table1】) #ref(table3.png,center) CENTER:(表の挿入(変換後),【table2】) **アンカーの削除 [#z04c279c] Pukiwikiでは、ページ更新をした際に、見出し(*)を使用した文末にアンカーが付属してしまう(図【【ancer】】参照)。アンカーを放置したまま、LaTeXの命令に変換しターミナルなどでコンパイルをするとエラーが出てしまうため、LaTeXの命令へ変換する際にそのアンカーを削除する必要があった。文章作成時にアンカーのような文章を記述してしまうと、アンカーと同様に削除してしまう恐れがあった為、文頭が「*」で文末に特定の文字列が存在した場合のみ、アンカーを削除するようにした(図【【texanc】】参照)。 #ref(ancer.png,center) CENTER:(ページ更新前と更新後の比較,【ancer】) #ref(texanc3.png,center) CENTER:(変換前と変換後の比較,【texanc】) **プリアンブルの付与 [#rb5fb635] LaTeXは、「プリアンブル」をテキストファイルに記述しなければコンパイルすることが出来ない。そのため、今回は卒業論文で使用するプリアンブルを変換プログラムにかけた際に、自動で付与している(図【【puri】】参照)。その際に'''\begin{document}'''も一緒に付与し、'''\end{document}'''は文章の最後に付与している。これによりコンパイルが可能になる。 #ref(puri3.png,center) CENTER:(プリアンブルの付与,【puri】) **表紙やページ番号の付与 [#y92f9e5c] 論文を印刷した際に、表紙やページ番号がついていないと非常に見にくくなってしまう。しかし、Pukiwiki記法はWebページを作成する言語であるため、表紙やページ番号を付与させるような命令はない。そのため、LaTeX命令に変換した際に、特定の命令の前後にページ番号などの命令を付与させるようにした。 概要を記述すると、表紙と概要ページのページ番号を出力する命令を付与する。目次を記述すると、目次以下のページ番号を決められた書式で出力する命令を付与する(図【【pagenumber】】参照)。 しかし、プログラムが自動的に決められたページ番号を出力する為、現在はページ番号の書式の設定などは出来ていない。 #ref(page3.png,center) CENTER:(表紙やページ番号の出力,【pagenumber】) *変換の自動化 [#sff4f0c7] LaTeXは、作成した文章をはPDFにする必要がある。コマンドプロンプトで、platexコマンドを使い、dviファイルを作成。その後、dvipdfmxコマンドを使い、PDFにする。このような作業は、手間がかかるため、自動化できないかと考えた。 まず、初めに考えたものは、サーバーを用いた方法である。しかし、本研究で使用したPukiwikiは、専用のサーバー内でのみ動作させることができる。しかし、そのサーバー上ではLaTeXが動作しなかっため、外部サーバーを扱うことも考えた。しかし、ファイル取得の際に、サーバー移動をしなければならないため、ユーザに負担がかかってしまう。 次に、Dropboxに着目した。Dropboxは、複数のコンピュータの間で、データの共有や同期が可能である。本研究室では卒業研究や卒業論文執筆についての作業はDropboxを用いて行っている。自身でサーバーにアクセスし、PDFを移動させるより、自動的に自身のPCに同期されるDropboxの方が便利だと考えた。 そこで、ページ更新ボタンを押した際に、Pukiwikiで編集している文章がLaTeX命令へ変換され、コンパイルされPDFになる。そのPDFをDropboxのフォルダ内に更新することができないかと考えた。 その提案を実現するためのプログラム作成を行った。このプログラムはシェルスクリプトを用いて作成した。 自動化を行うために、LaTeXをコンパイルするために用いるフォルダ内のファイルと、文章作成を行っているPukiwikiのページのディレクトリのコピーを作成する。この処理を、シェルスクリプトのrsyncを用いて行う。 本研究で作成したPukiwiki記法をTeX命令へ変換する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(flow.png,center) CENTER:(プログラムの流れ,【flow】) *~まとめと今後の課題 【chap5】 [#cce84965] 本研究では論文作成のためのシステムを作成した。 このシステムを扱い本論文を作成した。PukiWikiを用いたことにより、単純な記法を用いながら、文章を記述することが可能になり、文章作成への集中は向上したと感じた。プレビュー時にも、文章やレイアウトを見ることでPDFのイメージができるようになった。また、ページ更新ボタンを押すだけでPDFが完成し、Dropboxへ更新されるため、コンパイルを行う手間を省けたのではないかと考える。 今後の課題として -箇条書きを入れ子にできない -パッケージの追加などには未対応である -プリアンブルが規定されたものしか付与できない -ページ番号も規定されたものしか付与できない -表や図のサイズや、文章のサイズなど細かい指定ができない -プレビューをすると、編集画面の上部にプレビューが表示されるため -数式に対応できていない -行番号がないので編集時にわかりにくい -PDFのファイル名がPukiwikiで作成したファイル名と違う 以上が挙げられる。 課題に対する改良案として、作成したプログラムの見直しが必要であると考える。数式対応については、Pukiwikiにプラグインを導入し、そのためのプログラムを作成することで解決可能であると考える。スクロールや行番号問題に対しては、PukiWikiを改良しなければならない可能性が高いので検討する必要がある。PDFのファイル名については、文字解析を行い、正確な名称に変換する必要がある。これはシェルスクリプトのプログラムを改良することで、解決可能だと考える。 *~おわりに [#ef19b892] 本研究では、LaTeXのような複雑な命令を記述しなくても、LaTeX形式の論文作成に取り組めるシステムを提案した。 Webブラウザ上で論文作成を行えるようにすることで、ダウンロードなどの環境設定の手間を省く。本研究で作成したシステムを利用し、記述した文章を保存すると、PDFファイルにすることが可能になり、ユーザへの負担も軽減と執筆作業に対する集中の向上を目指した。 まず、Pukiwiki記法を用いて作成した文章を、LaTeXの命令へ変換するプログラムを作成した。また、PukiWikiのページ更新ボタンを押すことで、Dropboxのフォルダ内にPDFファイルを作成するプログラムを実装した。 結果、本学科指定の論文作成をすることが可能になった。 今回、本論文をPukiwikiで作成するにあたり、使用できない命令や、細かい指定が出来ない等の課題を発見することが出来た。 今後は、発見した課題を解決するために試行錯誤をしていきたい。 *~謝辞 [#t76c9886] 本研究、本論文を終えるにあたり、御指導・御教授を頂いた兼宗進教授に深く感謝いたします。 また、学生生活における基礎的な学問、学問に取り組む姿勢をご教授頂いた、メディアコンピュータシステム学科の先生方に深く感謝致します。 また、本研究を進めるにあたり御教授いただきました、下倉雅行先生に深く感謝致します。 本研究期間中、本研究に対する貴重な御意見、御協力を頂きました島袋舞子氏に感謝致します。そして、卒業研究に共に励んだ兼宗研究室メンバー一同にも感謝します。 ((奥村 晴彦.『LaTeX2ε 美文書作成入門』技術評論社[1997-2010],【tex】)) ((吉井 了平.『Wiki2LaTeXフィルターの開発』[2010],【yosii】)) ((増井 俊之.『Perl書法』[1993],【perl】)) ((Perl基礎入門 | KentWeb '''http://www.kent-web.com/perl/''',【perl2】)) ---- *~プログラムリスト [#h12a62c8] <<< 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"; >>>