Word におけるソースコード用スタイルの作り方

本記事の内容は、Windows 版 Word 2019 で検証しています。一部、操作が異なりますが、Word 2007 以降なら使えると思います。
初心者向けの説明を心がけており、分かっている人には当たり前の操作も含まれています。分かるところは飛ばしてください。

本記事で作成するスタイルの利用例 GIF はこちらです。
![スタイル作成・適用例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/2fe72681-3854-2f8e-f49b-e9d67b6ced3b.gif)

# はじめに

こんにちは。
**学生の方**が、プログラミングの授業のレポートとしてソースコードを Word で提出したり、**教員の方**[^teacher]が、自作テキストの中にソースコードを張り付けたりすることがあると思います。
[^teacher]: 私自身も教員に似た職業に就いていることから、Wordでソースコードを含む文章を書くことが多い方向けの内容です。

そんなとき、初期設定で何も考えずにそのまま張り付けると、
* 入力時に、`if`が`If`のように自動で変換されてしまうことがある（自動校正機能が邪魔になる）
  * [オートコレクト（自動校正機能）の解除](#オートコレクト自動校正機能の解除)で解決します
* 等幅フォントでないのでインデントが崩れる
* フォントによっては、0, O や i, l, 1 の差が分かりにくい
  * [【省略可】フォントの導入](#省略可フォントの導入)で解決します
* タブの幅が大きすぎる
* 両端揃えのため、長いコードは単語間隔が広がる
* 行間が離れすぎてしまう
  * [新しいスタイルの作成](#新しいスタイルの作成)で解決します

などの問題が発生します。（下画像は例）
![初期設定での例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/ce7cbd42-1dd0-50eb-0816-fa3c397f85a2.png)

そこで今回は、ソースコードをキレイに[^beautiful]表示するスタイルを作成し、再使用性を向上させつつデザインを整えられるようにします。

[^Beautiful]: 「キレイに」という個人の感覚には差がありますし、様々な出力（紙、Word編集画面、PDF、画面解像度など）の影響を受けます。設定方法が分かれば自分でカスタマイズできます。

ただ、スタイルを1度も使ったことがない方にとっては難しいかもしれません。その際は、手順を飛ばさず、時間を掛けて操作してみると、次第に書式についての理解が深まり、応用できるようになると思います。

ちなみにこのスタイルの作り方は、とある大学校のF先生の授業で知りました。
こういうノウハウは公開しても怒られないはずです。多分。

## 他の事例

ネット上にもさまざまな解決方法が見つかりますが、今回のスタイルを用いる方法は、ワンクリックで適用できることがメリットです。
* VS Code などのエディタから書式付きでコピペしたり -> [tomabouの日記 - Word文章にソースコードを貼る法](http://tomabou.hatenablog.com/entry/2017/12/27/234136)
* VBA で解決したり -> [Qiita - [Word VBA]ソースコードをフォーマットする](https://qiita.com/kencoba/items/900fed871298868e8ad4)
* 1*1 の表を使ってみたり -> [やってみたらできた - Wordで作成した論文にソースコードを読みやすく貼り付けるときのコツ](https://www.narugaro.com/day/word%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E8%AB%96%E6%96%87%E3%81%AB%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%8F%E8%B2%BC/)

# Word 設定の変更

まずは、入力操作関係の問題を解消します。
[ファイル]タブの[オプション]から、[Word のオプション]を開きます。

参考URL: [Microsoft Support - Word のオプション ([詳細設定]) ](https://support.microsoft.com/ja-jp/office/word-%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3-%E8%A9%B3%E7%B4%B0%E8%A8%AD%E5%AE%9A-1b3d9436-bc3a-4c5d-a55f-17450e701663)

## 【省略可】編集記号を表示させる

必須ではありませんが、編集記号が見えると私は安心します。

* オプションウィンドウ左側の項目 [表示] を選択する
  * ウィンドウ中央の項目 [常に画面に表示する編集記号]
    * [すべての編集記号を表示する] にチェックを入れる

## オートコレクト（自動校正機能）の解除

Word の自動校正機能は、プログラミング言語にとって余計なお世話になることが多々あります。
本来は一つ一つ吟味して機能を解除した方が良いかもしれませんが、手っ取り早く、全て解除してから必要だと思うものはチェックを入れてみるのも手だと思います。

* オプションウィンドウ左側の項目 [文章校正]を選択する
  * ウィンドウ右側上部の項目 [オートコレクトのオプション] を選択する
    * [オートコレクト] タブの全て

# スタイルの作り方（行番号なし）

## 【省略可】フォントの導入

プログラミングエディタのほとんどは、等幅フォントを使用していると思われますが、Word などの文書作成ソフトはプロポーショナルフォントを使用しており、そのままだとインデントが崩れます。
Windows ならとりあえず「MS ゴシック（Pが付かない方が等幅）」を使えば良いと思いますが、どうせなら IPA フォントのようなソースコード向けフォントを導入したほうが良いと思います。

文字情報技術促進協議会や窓の杜のサイトより、「IPAフォント 4書体パック」をダウンロードし、インストールしておきます。
インストール後、Word で使用するためには Word の再起動が必要です。

* [文字情報技術促進協議会 - IPAフォント](https://moji.or.jp/ipafont/ipa00303/)
* [窓の杜 - IPAフォント](https://forest.watch.impress.co.jp/library/software/ipafont/)
* [武蔵システム - フォントのインストール方法（Windows 10 の場合）](https://opentype.jp/fontinst10.htm)

## 新規スタイルの作成

それでは、新規作成したファイルで作業を始めましょう。

### 【初心者向け】スタイル一覧を出す

[ホーム] タブの中のリボンに [スタイル] があり、右下のマークをクリックでスタイル管理画面を出します。
詳細設定のためのプロパティは、このように、リボンの各設定項目の右下のボタンで出すことができます。

参考URL: [Microsoft Support - スタイルをカスタマイズまたは新規作成する](https://support.microsoft.com/ja-jp/office/%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%BE%E3%81%9F%E3%81%AF%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-d38d6e47-f6fc-48eb-a607-1eb120dec563)
![スタイル管理画面の出し方](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/00a05540-648a-4872-53f7-9da9e958972b.png)

### 新しいスタイルの作成

まず、[スタイル一覧] より [スタイルの作成] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/f639cb8f-a072-546c-a198-b95d73c07c4d.png)

ここでは、"code(NotNUm)" という名前をつけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/6ed22575-3248-3223-e384-8c7c8b47c3ff.png)

今回設定した書式を箇条書きしています。
* フォント
  * (日) IPAゴシック
  * (英) IPAゴシック
* 段落
  * グリッドへ配置しない
  * 左揃え
  * 同じスタイルの場合は段落間にスペースを追加しない
  * 単語の途中で改行する
  * 日本語と英字の間隔を自動調整しない
  * 日本語と数字の間隔を自動調整しない
* 基準
  * 標準

それでは、設定方法を見ていきましょう。
![新しいスタイル設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/f4adc9e9-d3d7-5633-7b30-40a2402a3a54.png)

* プロパティ
  * [名前] はとりあえず "code(NotNum)"
  * [種類] は "段落"
  * [基準にするスタイル] は "標準"
  * [次の段落のスタイル] は自分自身の "code(NotNum)"
* 書式
  * 左揃え

ここからは、追加の書式を [書式▼] ボタンをクリックして設定します

* フォントの設定
  * [フォント] タブより、以下を設定する
    * [日本語用のフォント] を "IPAゴシック" にする
    * [英数字用のフォント] を "日本語用と同じフォント" にする
  * [詳細設定]タブより、以下のチェックを外す
     * "カーニングを行う"
     * "[ページ設定]で指定した1行の文字数を使用する"
* 段落の設定
  * [インデントと行間隔] タブより、以下を設定する
     * "同じスタイルの場合は段落間にスペースを追加しない" のチェックを入れる
     * "1ページの行数を指定時に文字を行グリッド線に合わせる" のチェックを外す[^line-grid]
  * [体裁] タブより、以下のチェックを外す
     * "英単語の途中で改行する"
     * "日本語と英字の間隔を自動調整する"
     * "日本語と数字の間隔を自動調整する"

[^line-grid]: ~~この設定いる？なんでデフォルトでチェック入ってるの？文句はさておき、~~この設定によって、フォントサイズを小さくしても行間が縮まらなかったり、フォントサイズを大きくすると行間がいきなり広くなったりします。

### タブ幅の変更

ここまでのスタイルを確認してみますと、このようにタブ幅がまだ大きいと思います。
![タブ幅が大きすぎる](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/0f3db2a8-b67a-42ed-e0b9-280db5a149ca.png)

タブ幅の設定はスタイルでは設定できないため、文書全体の設定を変更します。

* [ホーム] タブのリボンから [段落] のプロパティを開く
  * プロパティ下部の [タブ設定] を開く

![タブ設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/4cb4956a-e14a-b08d-5ee1-70256f32a6a0.png)

タブ幅を [既定値] の項目に "全角文字単位"で設定します。（半角スペース4個なら2字）  
スタイルの設定では、この [既定値] が表示されないため、文書で設定する必要があります。

ただ、文字サイズを初期設定から変更すると、タブの幅がずれてしまいます。この問題は解消できておりません。
そのため、文字サイズを変更したいときは、ハードタブではなくソフトタブを使用するようにします。

これで設定は以上です。お疲れさまでした。

# スタイルの作り方（行番号あり）

ソースコードに行番号をつけたい場合、"段落番号" をつければよいと思われるかもしれません。しかし、私が試したところ、どうも上手く行かないケースがあるように思います。

## 段落番号をつけてみる（失敗）

まず、新しいスタイルを作成します。基準は先ほど作成した "code(NotNum)" にしておきます。
その後、適当に段落番号を設定します。

一見できているように見えますが、別の場所にコードを追加すると、番号が連続してしまいます。
![段落番号の設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/0986ee63-4f98-53aa-2138-208f0926a6f2.png)

なので、番号を1から振り直します。（番号のあたりを右クリックで [1から再開] ）

すると、下のようにインデントが崩れてしまい、直すのにひと手間かかってしまいます。
![番号を振り直すとインデントがずれてしまう](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/dddeb943-65be-f1c9-3c7a-30ad5d096043.png)

解決策として、段落番号のスタイルをいじってしまう方法がありますが、他で段落番号をつけたときに困ります。
参考URL: [Qiita - Wordの「段落番号」インデントが崩れる問題の解決方法](https://qiita.com/pakchi20/items/af15d561046df2a8f150)

ダメではないが、あともう少しと言ったところでしょう。

## アウトラインを設定する（成功）

そこで、普段は見出しの章立てなどに使用される [アウトライン] を、少し変わった使い方で使用します。

* 新しいスタイルを2つ作成する
  * [名前] は、"code(Num)Header" と "code(Num)Body"
  * [基準] は先ほど作成した "code(NotNum)"
* 2行のテキストを用意し、新しく作成したスタイルを適用しておく

こちらの画像では、分かりやすいように色で区別しています。
![アウトライン適用前](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/e9e3fffd-0be2-7f28-1e00-994a4d45bcfe.png)

まず、1行目 "code(Num)Header" にカーソルを合わせます。
"ホーム" タブの "段落" グループの "アウトライン"より、"新しいアウトライン定義" を選択します。
![新しいアウトライン定義](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/b5188c46-0ab7-77c9-0e47-5deae11dc9a0.png)

* 左下の [オプション >>] をクリックする
  * [変更するレベルをクリックしてください] で "1" を選択する
    * [レベルと対応付ける見出しスタイル] で "code(Num)Header" を設定
  * [変更するレベルをクリックしてください] で "2" を選択する
    * [レベルと対応付ける見出しスタイル] で "code(Num)Body" を設定

下はアウトラインレベル1の設定例です。
![アウトライン レベル1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/e09bec13-f384-454a-58e3-7f6c1161d9e8.png)

設定を閉じると、下のようにアウトラインが設定されています。
![アウトライン適用後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/e252a481-127b-b11c-b809-b279083dddf2.png)

そこで、
"code(Num)Header"を、ソースコードのタイトルとして使い、
"code(Num)body"を、ソースコードの行番号として使います。

こうすることによって、複数のソースコードを貼ったとき、間に "code(Num)Header" のスタイルが存在すれば、ソースコードの行番号が連続することはありません。

もう一度アウトラインの設定を開き直し、[番号書式] を設定します。
アウトラインの設定を開き直すには、番号のところを右クリックし [リストのインデントの調整] を選択します。（名称が悪い気がする）

* "code(Num)Body"
  * [番号書式] を "1.1" から "1:" にする
    * このとき、左側の "1" を消し、右側の "1" を残す
  * [番号の整列] を "左揃え" から "右揃え" に変更する
* "code(Num)Header"
  * 番号がつかないようにするため書式を消す

その他、インデントなどを調整して完成です。
![完成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/b13f8758-3e22-0eb5-7404-f0938ed8e72b.png)

# 書式を変更しても、他の場所の同じスタイルの書式が更新されないとき
通常は、[スタイルの変更] 以外で書式を変更しても、そのスタイルを使っている他のところへ変更が伝播しません。[^propagation]
[^propagation]: 「自動的に更新する」にチェックを入れれば、この問題を解決できます。しかし、全ての場所が同時に更新されてしまうので、推奨しません。

下の画像の例だと、行番号2のインデントを変更したのにも関わらず、他の行の書式が変わっていません。
![インデントの変更が伝播しない](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/ffda4bbb-6ccc-0553-4c7d-b690668fec53.png)

その場合は、スタイルの一覧でそのスタイルを右クリックし、[選択箇所と一致するように"スタイル名"を更新する] を選択します。

これで設定は以上です。お疲れさまでした。

# 応用例
* Qiita っぽくしてみたスタイル
![Qiitaライク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/6a364291-10ee-b21f-d0ad-b4223fb93f80.png)

* 私の印刷用スタイル
![好みのスタイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125577/2a1aa150-2177-99de-9a2d-02f5ef35138a.png)

# おわりに

Word のスタイルを活用するとデザインの統一が非常に楽になり、特に教員の方におすすめです。

こういうPC操作を説明する記事は、スクショを撮るのが非常に大変ですね。

この記事は Qiita で初めての投稿記事でした。いつか投稿してみたかった。
読みにくいところやご指摘があれば、気軽にコメント下さい。