論文形式の 文書のスライド発表形式の  文書への変換プログラム

日本 株

東京基礎研究所，金沢工業大学客員教授

寒川光 年 月  日
 スーパーユーザのテクニック』で，論文形式の  文書を，  による簡単 文書に変換する方法を紹介した ．スライド発表用には   の   クラスを使用し，変換には   プログラムに対する指示文（ディレクティブ）を使用する．本資料は「数学ソフトウェアとフリードキュメント 」での講演資料として，このアプロー『  な変換プログラムによって，スライド発表形式のチを発想した周辺事情を含めて紹介し，講義や勉強会などで数式を多用する方々にこの方法を利用していただく目的で用意した．
指示文の利用  や  言語によるプログラムでは，原始（ソース）プログラムにコンパイラに対する指示文（言語規格上ではコメント行だがコンパイル時には特別な指定をできるステートメント）によって， 通り， 通りにコンパイルする方法が利用されている．この方法と同様に，  のソーステキストを原始プログラムと見立てて，シングルソースで論文用と発表用を  通りに変換されるようにした．この場合，変換後のテキストには直接手を加えない方針とする．両者に共通のソースを用いて，改訂はそれに対してだけ行えば両方に反映されるようにする．
スクリプト言語プログラミング 数値計算には ，システムプログラミングには  言語， サー

ビスでは  というように，処理内容に適したプログラミング言語がある．文書の変換には   の正規表現を利用すると，意外に簡単に変換プログラムを実現できる．

仕様の決定と改良 実際に使用しながら，自分のプレゼンテーションに適した形に仕様と変換プログラムを改良してゆく（日曜大工プログラミングの楽しみ）．

 クラスの使い方
クラス名を   としてスライドにしたいものを   !" と  ! !" で囲う．図 # は， の  $  環境での作図機能は次のように纏められる．
」の # センテンスの後に $   環境によって % 項目を箇条書きした例である．ソーステキストのファイルを   & ' とすれば， '   " と ! ( )    " で   & を作成できる．オプションの ) " は ! ( に与える用紙サイズである．  !* " を指定すればドキュメントクラスに   " を指定して，「外側の枠を消すことができる．

論文用テキストからスライド用テキストへの変換
ソーステキストが センテンス レコード原則で書かれていると，変換プログラムは例えば   なら+, -.  " のループ構造の中で処理しやすい．入力ファイルの # レコード単位に文脈と指示行に共立出版，  年  月．

       

# の 環境での作図機能は次のように纏められる．

任意の太さの縦横の罫線を引く．

 限定された傾きの  以上の長さの斜め線と矢印を描く．
 任意の位置に非常に正確にフォント（図形）を配置する．
 フォントをマトリックス構造に配置する（配置される場所は  環境や   環境のように，置かれるものの大きさにぴったり揃えられる）．

図 #/   クラスによるスライドの例
従ってレコードを加工すればよいからである．

' !& とした．, & ' ファイルを変換して，, & ' を作成する場合には  
' !& , & '  , & '" とする．このあと  ' , " と ! ( )  , " とするので，(0 を用意して (" で論文用が，(  !" でスライド用ができるようにしている．
プログラム名は0 $  環境，1$  環境，  環境などを検出し，この環境をまとめて    !"と  ! !" の中に埋め込む．変換対象の環境は 0 $ ， ，1$ ，! 2 ,，1 2，
 ，  , ，1$ ，  3，$  ，!  ， ,   ,2 環境としている．検出は入力行から  ''' を探しており，# 文字目にブランクを入れた場合は変換対象から除外される．
移行対象の環境

ダミー環境

論文には書かれていないが，プレゼンテーションでは必要な（式の細かな変換など）補足説明のためのスライドや，論文の紙数制限で割愛した数式を表示する目的で使用する．また大学の講義では，先週の講義で使用した図をその日の講義テーマの前に復習で見せるなど，別ファイルの図を説明に使いたいということがある．これらの目的で，上記の環境の行頭に4を # つだけ付加した行は，4を外してスライドには現われる機能を設けた．
見出しの表示 ，$ ，$$ ，  , に対しては，その引数（見出し）をそれ
 のフォントサイズでスライドの中央に   環境で出力するように

ぞれ 5$ ，,$ ， 678， 変換している ．

ディレクティブ

上記の変換だけでは不十分であるが，次の % 種類のディレクティブを挿入することで，実用的なスライドの加工が可能になる．

 キーセンテンスの直前に 4  " の # 行を加える．これによって次のレコード（行）を  3

環境のアイテムとして埋め込む．# センテンスではなく，センテンスの一部や単語を指定する場合

は，# センテンス # レコード原則を諦めて，改行を細かく入れて，表示に回す部分を # レコードと スタイルファイルとして   を対象としている．

して切り出し，その直前に4   を指定する．指定されたキーセンテンスは見出しの下に箇条書きされる．

 指定したキーセンテンスが多いと，# 枚のスライドに入りきらない．そこで 4+ !" を入れて強制的にスライドを改めるようにした．

   と  このディレクティブに挟まれたソーステキストは，スライド用のソーステキストにコピーする．複数の数式を # 枚のスライドに収めるために使用する．講義などで，式の展開を確認しながら説明する場合には必須である．
％     環境での図のサイズ調整のために用意した．図を縮小する必要がある場合，これを変換プログラムで自動的に行うのは無理と考えた ．ここでは図ごとにサイズを，論文用とスライド用の  通りに指定して，  $ 9#  ％

 !7   $ 9:" のように置き換える．

『   スーパーユーザのテクニック』例

共立出版さんのご厚意によりサンプルをダウンロード可能としていただいた．これらは金沢工業大学でのプログラミング演習の説明や，雑談などの目的で用意したものが大半であるが，数式が含まれるものが多く， 以外のツールで説明文章を用意することに気が進まないものである．説明文章とプレゼンテーション用スライドを  重に用意するのは手間と考え，これらの資料の作成と並行して， ' !& を改良していった．変換プログラムに  "  !*  "; の # 行を加えることで，4 3 ディレクティブを不要にできる．
ベジェ曲線 コンピュータグラフィックスの内容で，フォントデザインには欠かせない知識である．内容に数式の展開が多いので，スライドは 4 2  と 4 2! を多用して，# 枚のスライドで式の展開が追える形にした．

 暗号の根拠となる表  -! . を， や  を変更して作表する  マクロ（アライメントタブを生成するマクロ）を解説した．後半は  -! . に関する話題（フェルマーの定理）と，7 6暗号，またユークリッドの互除法と連分数の幾何学的解釈について述べる．

  インターフェース 古典的なペンプロッタのインターフェースを， （  & ）と) !+（  '& ）で実装する．どちらも   と  から呼び出し可能である．

対話型プログラム   インターフェースでは計算結果のポスト処理をしたので， ) !+ の対話型の機能を利用しなかった．ここではその延長で対話形式の機能（イベント駆動型のループ構成）を経験してみる．
フラクタル 2 +  や $' 環境でのプログラミングと計算結果の出図の方法を実習する．題材はフラクタル図形で，その語源である分数（*  ）次元の説明も加えた．
疎行列のプロット 数値解析プログラムが差分法と有限要素法を使用した場合の，疎行列の非ゼロ要素の位置と，その行列を三角分解したときに現れるフィルインと呼ばれる要素の位置を作画する．

 ライブラリ <= の超並列型スーパーコンピュータ =$ 8 で，< ライブラリを <5 をベースに実装した方法を解説する．ここでは説明文に記述された以上の図をスライドに用意して，<5 に少しずつコンポーネントを追加してゆく様子を紙芝居でプレゼンテーションする．
 変換対象の環境の終わりまでを読み込んで，スライドに変換された場合の縦横のサイズを予測する必要がある．

 次元配列分割・分散 線形代数の並列計算では行列を  次元配列分割して，並列計算のノードに分散させる．密行列を  次元ブロックサイクリックに配列分割して < プログラミングする人には便利なデバッグツールでもある．

写真機のレンズ レンズ面を増やすと収差を除去するためのパラメータが増えるので，収差の少ないレンズを設計することができる．初等関数の多項式近似で，多項式の次数（パラメータ）を増やすと精度が良くなるのに似ている．  インターフェースの演習問題の背景の説明でもある．
住所録から宛名変換 ソーステキストの変換プログラムの概要を述べる．宛名の郵便番号は正確に置く必要があるので， の  $  環境で座標値を指定している．

  楽譜を書くための $  を紹介し解説する．
「楽譜とその演奏」を「文書テキストとその印刷」のアナロジで考えたエッセイを付加した．
「音律は音楽のアーキテクチャ」か．

おわりに情報は上流から下流へとコンパイルされ変形されるたびに形を変え，最終的には美しい図を含む読みやすい文書になるが，ある種の情報，例えば図形の持つ論理的な意味をプログラムで抽出することは難しくなる．ここでの「意味」は，対称性や繰返し，曲線の次数などを指している．このような意味は，資料の最上流では可読な形で存在するが，下流へ進むたびにそれはプログラムの実行結果に置き換えられてしまうので，上流のほうが意味を正確に扱うことができる．最終的には > ファイルが表示したビットマップを人間が眺めて判定するしか方法がなくなる．この段階まで進んでしまうと，8?< を使ってカットアンドペーストでパワーポイントファイルに貼りつけたりしなくてはならなくなる ．論文などの文書に描かれた図をスライド用にするには，拡大して配置し直すだけでよいので，ソーステキストのまま取り出せれば簡単にできそうである．数式や表も同様である．  の場合，0 $ ， ，1$  環境で書かれた図，表，数式を，拡大してスライドの中央に置くだけでよい．
『     』は金沢工業大学の大学院で「特別講義」として行ったテキストを元にしている．@@ 年に始めた講義内容で，当時はグリッドコンピューティングが脚光をあびていた時期で < 革命の進行とともにシステムが複雑化・巨大化してきた時期である．この複雑化を支えてきたシステムの階層構造とマルチプログラミングリンガルの重要性を痛感していた．
論文や書籍出版などを扱う「文書処理」アプリケーションでも，ハードウェア（写植機），制御言語，その上に構築される  と  の世界があり，文書はその上に書かれてゆく．これらの階層を縦に繋げて，どの階層で何がおこっているかを仔細に分析する経験は，システムエンジニアとしてエンジニアリングセンスを磨く上で役立つのではないかと考えた．ここには普段はあまり目にしないマクロプログラミングや  言語に触れる新鮮さもある．また，プログラムの仕様を決める経験もできる．この題材では，自然にプログラミングを原理的な姿から考え直す機会を与える．
インターネットの上に展開された < システムの階層構造はとても深くなり，各階層に現在でも次々と新しい技術が投入されている．アセンブリ言語で機械語を並べるプログラミングを平屋にたとえるなら，現代の < システムは高層ビルディングにたとえられよう．その最上階からアプリケーションを叩く（に要求を出す）と，下の階でアルゴリズムが回って複雑な処理がなされる．システム全体をブラックボックスとして見るのではなく「なぜこれが機能するのか」という問題意識を忘れずに，アルゴリズムは何階で回っているのだろうかと考える習慣を忘れないでほしい． # つ下の階のことは考えれば分るが，  つ下の階になると，十分な知識がなくては分らないことが多い（各階のアルゴリズムは意外に単純な場合が多いにもかかわらず）．
  " のソーステキストで  ファイルで取り込まれた図を，  " でコンパイルして #$ ファイルに変換し，さらに #%&!
!
変換してからそれを巨大なビットマップファイルとして取り出してパワーポイントに貼りつけたりすると，クリック猿と呼ばれかねないので注意しよう．

%