投稿者「kujipon」のアーカイブ

PowerPointでCなどのソースコードをシンタックスハイライト

プログラミングの講義などを担当しているので,ソースコードをPowerPointに載せる機会が非常に多いです。そこで,少しでもわかりやすくしようと,Visual Studio や今どきのblogみたいにシンタックスハイライトをしたいのですが,当然PowerPointにはそんな機能はありません。いくつか方法はあるみたいですが,今のところ私はこうやっています。

テキストエディタ SciTEをまずインストール。
SciTEは source code editor というくらいなのでデフォルトでシンタックスハイライト機能があります。

ソースコードをSciTE上で編集します。他のエディタ等から貼り付けても良いです。自動的にシンタックスハイライトされます。

Ctrl+a で全選択し,Edit -> Copy as RTF します。

なお,SciTEから Copy as RTF するときにいちいちプルダウンメニューからやるのも大変です。Cops as RTFには元々ショートカットキーが無いみたいですが,以下のようにするとCtrl+cに割り当てることができます。

Options -> Open User Options File で,以下のように記入。

user.shortcuts=\
Ctrl+c|IDM_COPYASRTF|

PowerPointでテキストボックスを作って貼り付けます。このとき,「貼付けのオプション」で「元の書式を保持」という方を選びます。

シンタックスハイライトされた状態で貼り付けることができました。

とりあえずシンタックスハイライトだけなら以上で良いでしょう。

私はさらに,以下をやりたいと思いました。

  • 等幅フォントで表示したい。フォントサイズも変えたい。
  • 行間をもう少し詰めたい。
  • 背景色やドロップシャドウもつけて目立たせたい。

SciTEのデフォルト設定ではVerdanaフォントでコピーされます。しかしソースコードはやはり,Inconsolata 等の等幅フォントで表示したいものです。

この場合,等幅フォント化するには2つの方法があるようです。

  1. SciTEの設定で,はじめからInconsolataにしておく。
  2. PowerPointに貼り付けたあとでフォントを変更する。

1の場合は,SciTEの設定ファイル SciTEGlobal.properties の

font.base=font:Verdana,size:10

あたりをいじります。この設定は,SciTE上での表示と,コピーしたときに属性としてくっついていく情報の両方に使われます。

しかし,上記のように他にも変えたい部分がいくつかあるので,2.の方法の方が良さそうです。ただ,これらを毎回やっていたら非常に大変なので,マクロ(vba)にしてみました。(こちらを大変参考にさせて頂きました)

Sub 行間カンマ8フォントInconsolata背景色薄灰色()
  With ActiveWindow.Selection

    'シェイプが選択されていない場合はマクロを終了する
    If .Type = ppSelectionNone Or .Type = ppSelectionSlides Then
      MsgBox "行間を変更したいプレースホルダなどを選択してください。"
      Exit Sub
    End If

    'テキスト編集モードの場合にはシェイプを選択する
    If .Type = ppSelectionText Then .ShapeRange.Select

    '自動調整をいったんオフにする
    .ShapeRange.TextFrame.AutoSize = ppAutoSizeNone

    With .TextRange
      '行間をポイント数で指定するように設定
      .ParagraphFormat.LineRuleWithin = msoTrue
      '行間を0.8にする
      .ParagraphFormat.SpaceWithin = 0.8
      '段落前を0にする
      .ParagraphFormat.SpaceBefore = 0

      'フォントをInconsolataへ変更
      .Font.Name = "Inconsolata"

      'フォントサイズを18へ変更
      .Font.Size = 18
    End With

    '自動調整を再度オンにする
    .ShapeRange.TextFrame.AutoSize = ppAutoSizeShapeToFitText

    '背景色を薄灰色へ
    .ShapeRange.Fill.ForeColor.RGB = RGB(250, 250, 250)
  End With
End Sub

なお,この場合,ソースを貼り付ける先は,普通のテキストボックスではなく,図形描画の「正方形/長方形」にする必要があります。「正方形/長方形」のテキスト領域にSciTEからソースを「形式を選択して」貼付け,その図形を選択状態にした上で,この「行間カンマ8フォントInconsolata背景色薄灰色」マクロを適用します。最終的には以下のような感じになります。

Inconsolataフォントは以下からダウンロードできます。http://www.levien.com/type/myfonts/inconsolata.html