ほとんど独り言です。
プレゼンにあたっては良い内容と良い資料、そして良い説明が最重要項目であることは自明です。ここではその様な事については一切触れず、『どうやってPCを用いた資料作りをするか』という事のみについて、思ったことをダラダラと書きます。
必要な機能は人それぞれでしょうが、備えていて欲しいと私が思う機能は
あたりです。
ダントツに広く使われているのはMicrosoft社のPowerpointのようですが、普及するに値する優れた機能と操作性を有しています。現場に於いてはまず確実に表示できる環境が整っているでしょう。数式が欲しければ付属の数式エディタ、TeXPointでできるみたいです。しかし個人的には何となく使いたくありません。似た様な意見の方もいらっしゃるようです。
OpenOffice.orgなるフリーのオフィス用アプリケーション群があり、その中にImpressというプレゼン用ソフトがあります。広く普及しているとは言い難いのですが、原稿をPDFで書き出せば後述する様に表示環境を選ばないでしょう。使用した事が無いので利点欠点は良く解りませんが、いずれ試してみたく思っています。(親戚であるStarOfficeも触った事はありません。)
これをつきつめると最終的に出力するファイル形式としてはplain text(参考:コラム - less プレゼンのすすめ)、RTF、HTML(参考:疎音:プレゼンツールとしてのHTMLとCSS)あたりになってしまいそうです。ですがいずれもページの概念が無い(上記「lessプレゼン」で上手く実現されてますが)ので、スライド単位の処理で難儀しそうです。となると、ビューアが無償配布されているAdobe社の提唱するPDFが良さそうな気がします。同社から販売されているAcrobatなるソフトで、印刷可能なものは全てPDFに変換する事が可能です。なので、文書作成に使用するソフトの制限は殆どありません。
個人的にはAdobe社のIllustratorを使うという結論に到達しました。根拠は以下の通り。
使っていて不満な点は、テクニカルイラスト向きなソフトでないこと(そのためのものでないので当然ですが)、複数ページに非対応なこと、動作が軽快でないという事です。まあ、テクニカルイラストに関しては工夫次第でどうにでもなる事柄です。複数ページに関しては、印刷可能範囲でアートワークを区切ったりレイヤを駆使してモドキな事は実現できますが、いずれにせよ面倒です。MultiPageなるプラグインがあり、便利そうですがまだ試していません。動作に関しては、現在のバージョンが軽く感じられる時代が到来するのを現在待っている所です。以下参考になりそうなリンク
CANVAS、Corel社製品、Freehandあたりが候補でしょうか。Illustratorの持つ欠点を克服しているものもあり、そこが魅力ですがそれ以上にIllustratorの長所が私にとっては魅力です。
Illustratorは基本的に複数ページ非対応です。なので、複数スライドから成る文書を仕上げようと思ったら他のソフトの補助が必要です。
Illustratorによって単ページPDFが作成できます。こうして各ページを作成した後にAcrobatで結合する事が可能です。知識不足なため、私は結合を手作業で行っていますが、バッチ処理も可能なのだそうです。ラドPDF管理ツールというのもあります。
InDesignとはAdobe社の販売する組版ソフトです。複数ページの作成はお手のもの、Illustratorの図のインポート等の相性は流石に抜群で、操作体系も似通っていてなおかつなかなかの図形描画も可能です。
ですが、そもそもが組版ソフトなのでスライド作りという観点からは当然ながらぎこちなさを感じ、1年程使ってみて個人的には「Illustratorを差し置いて使用するメリット無し」という結論に至りました。操作体系はIllustratorとなまじ似ているので、若干の違いが却ってストレスになるし、そもそもIllustratorと相性が良いという事を求めるならば、最初からIllustratorで全て仕上げてしまえば済むことです。
テキストを書く場合に、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); } } } }
しかしこのソフト、あまりにも多機能なのでスライド作りに用いるのは何だか申し訳なく勿体なく感じてしまいます。
いわずと知れた無敵の組版ソフトです。これでスライドを作成する方も大勢いらっしゃる様です。
数式を多用する方や、リンクを効率良く埋め込みたい方等に抜群の威力を発揮する様ですが、処理するまで見栄えが判らず、細かい位置調整には慣れが必要です。しかし、特定の環境に依存しないあたりが最大の強みでしょう。FoilTeX(CTANにある)やprosper、TeXPower等が使われているようです。prosperはdviの状態で見栄えが判らないのそうです。この様にTeXで全て作るのも良いと思うのですが、上で記述した「Acrobatによるページ連結」というのをTeXに代行させる使用というのも有効かもしれません。即ちIllustratorで各スライドの見栄えを作成しておき、TeXのソースの方にはそれらを配置する記述のみ書いておく、といった感じで、いわばIllustratorとTeXの役割の折衷です。TeX的には若干邪道な気もしますが、それなりにWYSIWYGでそれなりにお手軽なので、個人的にはこれが一番良いのかなあと思っております。が、実際にこうしてスライドを記述した事はまだ無いので何とも言えません。