ほとんど独り言です。
 
 *前書き [#k4f1aa21]
 
 プレゼンにあたっては良い内容と良い資料、そして良い説明が最重要項目であることは自明です。ここではその様な事については一切触れず、『どうやってPCを用いた資料作りをするか』という事のみについて、思ったことをダラダラと書きます。
 
 *どんなソフトを使うか? [#m0385f92]
 
 **満たすべき条件 [#o835a95b]
 必要な機能は人それぞれでしょうが、備えていて欲しいと私が思う機能は
 -表示に限れば特殊な環境を要せず(他の人のPC+プロジェクタ なる環境が有り得る)、できれば全画面表示が可能
 -矢印など図形の描画と画像の表示(TeXとの兼ね合いでEPSな図を流用する事が多い)。できれば数式も
 -意図通りにスライド毎に区切り、印刷できる事(OHPを使う事もあるため)
 -軽快な動作     
 
 あたりです。
 
 **プレゼン用ソフト - Powerpoint [#g978fc1e]
 
 ダントツに広く使われているのはMicrosoft社のPowerpointのようですが、普及するに値する優れた機能と操作性を有しています。現場に於いてはまず確実に表示できる環境が整っているでしょう。数式が欲しければ付属の数式エディタ、[[TeXPoint:http://raw.cs.berkeley.edu/texpoint/]]でできるみたいです。しかし個人的には何となく使いたくありません。似た様な意見の方もいらっしゃるようです。
 
 -[[プレゼンソフトって、つまり何?:http://pc-training.hp.infoseek.co.jp/presentation.html]]
 -[[LaTeX でプレゼン:http://www.str.ce.akita-u.ac.jp/~gotou/tebiki/texpre.html]]
 -[[パワーポイント力学:http://www.asahi-net.or.jp/~FV6N-TNSK/gates/powerpoint.html]]
 
 **プレゼン用ソフト - Impress [#jb788339]
 
 [[OpenOffice.org:http://www.openoffice.org/]]なるフリーのオフィス用アプリケーション群があり、その中にImpressというプレゼン用ソフトがあります。広く普及しているとは言い難いのですが、原稿をPDFで書き出せば後述する様に表示環境を選ばないでしょう。使用した事が無いので利点欠点は良く解りませんが、いずれ試してみたく思っています。(親戚である[[StarOffice:http://wwws.sun.com/software/star/staroffice/index.html]]も触った事はありません。)
 
 
 *「表示に特殊な環境が不要」 [#a22a3507]
 これをつきつめると最終的に出力するファイル形式としてはplain text(参考:[[コラム - less プレゼンのすすめ:http://www.imou.to/~AoiMoe/column/less/]])、RTF、HTML(参考:[[疎音:プレゼンツールとしてのHTMLとCSS:http://soin.jp/mt/archives/2004/03/18/013934.html]])あたりになってしまいそうです。ですがいずれもページの概念が無い(上記「lessプレゼン」で上手く実現されてますが)ので、スライド単位の処理で難儀しそうです。となると、ビューアが無償配布されている[[Adobe:http://www.adobe.com]]社の提唱するPDFが良さそうな気がします。同社から販売されているAcrobatなるソフトで、印刷可能なものは全てPDFに変換する事が可能です。なので、文書作成に使用するソフトの制限は殆どありません。
 
 *図形の描画と画像の表示 [#n0a5d864]
 
 **Illustrator [#taac30bf]
 
 個人的には[[Adobe:http://www.adobe.com]]社のIllustratorを使うという結論に到達しました。根拠は以下の通り。
 
 -一旦慣れてしまったため、他のソフトの操作方法が覚えるのが面倒だった
 -業界標準で、機能は申し分無く(寧ろ過多)、各種テクニックの情報も豊富
 -本家本元なため、EPSやPDFと何かと相性が良い(と感じる)。読み込んで編集までできてしまう
 
 使っていて不満な点は、テクニカルイラスト向きなソフトでないこと(そのためのものでないので当然ですが)、複数ページに非対応なこと、動作が軽快でないという事です。まあ、テクニカルイラストに関しては工夫次第でどうにでもなる事柄です。複数ページに関しては、印刷可能範囲でアートワークを区切ったりレイヤを駆使してモドキな事は実現できますが、いずれにせよ面倒です。[[MultiPage:http://www.hotdoor.com/multipage/]]なるプラグインがあり、便利そうですがまだ試していません。動作に関しては、現在のバージョンが軽く感じられる時代が到来するのを現在待っている所です。以下参考になりそうなリンク
 
 -[[DTPとTeX:http://oku.edu.mie-u.ac.jp/~okumura/texfaq/dtp/]]
 -[[女神のDTP:http://www.linkclub.or.jp/~kubo/]]
 -[[hot door:http://www.hotdoor.com/]]及び[[Applicraft:http://www.applicraft.com/]]
 
 **それ以外 [#lc2b5e70]
 [[CANVAS:http://www.deneba.com/products/canvas9/]]、[[Corel社製品:http://www.corel.com/]]、[[Freehand:http://www.macromedia.com/software/freehand/]]あたりが候補でしょうか。Illustratorの持つ欠点を克服しているものもあり、そこが魅力ですがそれ以上にIllustratorの長所が私にとっては魅力です。
 
 
 
 *スライド(ページ)の区切り [#w2a6d93b]
 Illustratorは基本的に複数ページ非対応です。なので、複数スライドから成る文書を仕上げようと思ったら他のソフトの補助が必要です。
 
 **Acrobat [#k165f0cf]
 Illustratorによって単ページPDFが作成できます。こうして各ページを作成した後にAcrobatで結合する事が可能です。知識不足なため、私は結合を手作業で行っていますが、バッチ処理も可能なのだそうです。[[ラドPDF管理ツール:http://www.vector.co.jp/download/file/win95/writing/fh304414.html]]というのもあります。
 
 **InDesign [#b90dbe7b]
 InDesignとは[[Adobe社:http://www.adobe.com]]の販売する組版ソフトです。複数ページの作成はお手のもの、Illustratorの図のインポート等の相性は流石に抜群で、操作体系も似通っていてなおかつなかなかの図形描画も可能です。ですが、そもそもが組版ソフトなのでスライド作りという観点からは当然ながらぎこちなさを感じる事もあります。テキストを書く場合に、InDesignはまず書く領域を定めた上で文字を入力するなり流し込むなりするのですが、一行に満たない註釈テキストを書く頻度の多いスライド作りにおいてはこれは若干の足枷となります(Illustratorでは「まずテキストありき」な入力ができるのですが)。これを胡麻化すためにJavascriptで短かいテキスト入力用の簡易スクリプトを作ってみました。将来に備えて作っただけでまだ本格的に使用していないので、不便な点やバグが潜んでいるかもしれません。
 InDesignとは[[Adobe社:http://www.adobe.com]]の販売する組版ソフトです。複数ページの作成はお手のもの、Illustratorの図のインポート等の相性は流石に抜群で、操作体系も似通っていてなおかつなかなかの図形描画も可能です。
 
 ですが、そもそもが組版ソフトなのでスライド作りという観点からは当然ながらぎこちなさを感じ、1年程使ってみて個人的には「Illustratorを差し置いて使用するメリット無し」という結論に至りました。操作体系はIllustratorとなまじ似ているので、若干の違いが却ってストレスになるし、そもそもIllustratorと相性が良いという事を求めるならば、最初からIllustratorで全て仕上げてしまえば済むことです。
 
 
 ***テキスト入力 [#u9fdf2be]
 
 テキストを書く場合に、InDesignはまず書く領域を定めた上で文字を入力するなり流し込むなりするのですが、一行に満たない註釈テキストを書く頻度の多いスライド作りにおいてはこれは若干の足枷となります(Illustratorでは「まずテキストありき」な入力ができるのですが)。これを胡麻化すためにJavascriptで短かいテキスト入力用の簡易スクリプトを作ってみました。まあまあ便利(無いよりはマシ程度)に使えています。
 
  // textbox
  // make or modify a textbox(textframe)
  with(app){
    if(selection.length == 0){
      AddNewFrame = true;
      myDisplayDialog("", 24, AddNewFrame);
    }
    else if(selection.length > 1){
      alert("too many selections")
    }
    else{  // selection.length == 1
      if(selection[0].constructor.name == "TextFrame"){
        CurrentText = selection[0].contents
        CurrentPointSize = selection[0].texts.item(0).pointSize
        myDisplayDialog(CurrentText, CurrentPointSize, false);
      }
      else{
        alert("It's not TextFrame")
      }
    }
  }
  
  function myDisplayDialog(CurrentText, CurrentPointSize, AddNewFrame){
  // AddNewFrame is used in "myReflectText"
    with(app){
      myDialog = dialogs.add()
      myDialog.canCancel = true;
      myDialog.name = " Simple Textbox ";
  
      with(myDialog){
  
        // labeling-column
        with(dialogColumns.add()){
          staticTexts.add({staticLabel:"text:"})
          staticTexts.add({staticLabel:"font size:"})
          staticTexts.add({staticLabel:"Frame width"})
        }
  
        // editing-column
        with(dialogColumns.add()){
  
          // text
          myTextEditField = textEditboxes.add()
          myTextEditField.editContents = CurrentText
          myTextEditField.minWidth = 280;
  
          // font size
          myPointSizeField = realEditboxes.add()
          myPointSizeField.editValue = CurrentPointSize;
  
          // radio button
          with(borderPanels.add()){
            with(radiobuttonGroups.add()){
              radMod =
  radiobuttonControls.add({staticLabel:"Modify",checkedState:true})
              radKeep = radiobuttonControls.add({staticLabel:"Keep"})
            }
          }
        }
      }
  
      if(true == myDialog.show()){
        NewPointSize = myPointSizeField.editValue;
        NewText = myTextEditField.editContents;
        ModifyFrameWidth = radMod.checkedState
        myDialog.destroy();
        myReflectText(NewText, NewPointSize,
  AddNewFrame,ModifyFrameWidth)
      }
      else{
        myDialog.destroy();
      }
    }
  }
  
  function myReflectText(NewText, NewPointSize, AddNewFrame,
  ModifyFrameWidth){
    myDoc = app.activeDocument;
    myBounds = myGetBounds(myDoc, myDoc.pages.item(0));
  
    if(AddNewFrame == false){
      with(app.selection[0]){
        contents = NewText
        texts.item(0).pointSize = NewPointSize
        if(ModifyFrameWidth == true){
          g = geometricBounds; // for simplicity
          geometricBounds = [g[0], g[1], g[2], g[3] + 300]; // unit:[mm]
        }
        fit(FitOptions.frameToContent);
      }
    }
    else{
      myPage = app.activeWindow.activePage;
      myTextFrame = myPage.textFrames.add();
  
      // frame size
      myTextFrame.geometricBounds = myBounds;
  
      // font size
      myTextFrame.texts.item(0).pointSize = NewPointSize;
  
      // text
      myTextFrame.contents = NewText;
  
      // resize the frame
      myTextFrame.fit(FitOptions.frameToContent);
    }
  }
  
  function myGetBounds(myDocument, myPage){
    with(myDocument.documentPreferences){
      myPageHeight = pageHeight;
      myPageWidth = pageWidth;
    }
    with(myPage.marginPreferences){
      myTop = top;
      myLeft = left;
      myRight = right;
      myBottom = bottom;
    }
  
    myRight = myPageWidth - myRight;
    myBottom = myPageHeight- myBottom;
    return [myTop, myLeft, myBottom, myRight];
  }
 
  // one-liner
  // resize the textframe to fill the text in one line
  with(app){
    if(selection.length == 0){
      alert("no selections")
    }
    else if(selection.length > 1){
      alert("too many selections")
    }
    else{  // selection.length == 1
      with(selection[0]){
        if(constructor.name != "TextFrame"){
          alert("It's not TextFrame")
        }
        else{
          g = geometricBounds
          geometricBounds = [g[0], g[1], g[2], g[3] + 300]; // unit:[mm]
          fit(FitOptions.frameToContent);
        }
      }
    }
  }
 
 しかしこのソフト、あまりにも多機能なのでスライド作りに用いるのは何だか申し訳なく勿体なく感じてしまいます。
 
 **TeX [#n345ed25]
 いわずと知れた無敵の組版ソフトです。これでスライドを作成する方も大勢いらっしゃる様です。
 
 -[[LaTeXを利用したプレゼンテーション:http://dirac.phys.saga-u.ac.jp/~funakubo/research/recipe/tex-presen.html]]
 -[[TeXを使ってプレゼンテーションをしよう!:http://www2.odn.ne.jp/nmatunaga/framedir/tex/tex_presen.htm]]
 -[[prosper:http://hashi4.civil.tohoku.ac.jp/soft/node10.html]]
 -[[LaTeXでプレゼンテーション:http://www.klavis.info/presen.html]]
 -[[LaTeXをpdf化してプレゼンしよう:http://www.str.ce.akita-u.ac.jp/~gotou/tebiki/texpre.html]]
 
 数式を多用する方や、リンクを効率良く埋め込みたい方等に抜群の威力を発揮する様ですが、処理するまで見栄えが判らず、細かい位置調整には慣れが必要です。しかし、特定の環境に依存しないあたりが最大の強みでしょう。FoilTeX([[CTAN:http://www.ctan.org/]]にある)や[[prosper:http://prosper.sourceforge.net/]]、[[TeXPower:http://texpower.sourceforge.net/]]等が使われているようです。prosperはdviの状態で見栄えが判らないのそうです。この様にTeXで全て作るのも良いと思うのですが、上で記述した「Acrobatによるページ連結」というのをTeXに代行させる使用というのも有効かもしれません。即ちIllustratorで各スライドの見栄えを作成しておき、TeXのソースの方にはそれらを配置する記述のみ書いておく、といった感じで、いわばIllustratorとTeXの役割の折衷です。TeX的には若干邪道な気もしますが、それなりにWYSIWYGでそれなりにお手軽なので、個人的にはこれが一番良いのかなあと思っております。が、実際にこうしてスライドを記述した事はまだ無いので何とも言えません。