Main Content

ドキュメントのコンテンツへの自動番号付け

章、節、テーブル、図の見出しなどのドキュメントのコンテンツに、自動で番号を付けることができます。自動番号付けオブジェクトを、ドキュメントで番号を表示する位置に追加します。自動番号は、各番号の値を順番に決定する番号付けストリームにそれぞれ関連付けられています。レポートの生成によって、自動番号付けオブジェクトは、同じストリーム内の他の自動番号とのドキュメント内での相対的な位置に基いて、番号に置き換えられます。たとえば、ストリーム内で最初の自動番号付けオブジェクトは 1 で置き換えられ、2 番目は 2 で置き換えられ、以後同様に置き換えられます。自動番号付けを使用して、1.1 節や 1.2 節など、階層的な番号付けスキームを作成できます。

プログラムまたはテンプレートに自動番号を定義することによって、ドキュメントのコンテンツに自動で番号付けできます。

プログラムによるコンテンツへの自動番号付け

プログラムによってドキュメントのコンテンツに自動で番号を付けるには、自動的に生成された番号を表示するドキュメント内の各位置で、以下を行います。

  1. mlreportgen.dom.AutoNumber コンストラクターを使用して、自動番号付けオブジェクトを作成します。コンストラクターに関連付けられた自動番号付けストリームの名前を指定します。たとえば、この行は chapter という名前のストリームに属する、自動番号を作成します。

    chapterNumber = AutoNumber('chapter');

    メモ

    指定された自動番号付けストリームが存在しない場合、AutoNumber コンストラクターは、その指定された名前の付いた番号付けストリームを作成します。暗黙的に構成されたストリームは、自動番号をアラビア数字で表示します。他のプロパティをもつストリームを使用するには、Document オブジェクトの関数 createAutoNumberStream を使用してストリームを明示的に作成します。

  2. AutoNumber を、自動番号に先行するテキストを含む TextParagraph、または Heading オブジェクトに追加します。

    append(chapHead,chapterNumber);
  3. mlreportgen.dom.CounterInc 書式オブジェクトを、自動で番号を付けるコンテンツ オブジェクトの Style プロパティに追加します。CounterInc オブジェクトを追加すると、段落や見出しが出力されるときに自動番号に関連付けられたストリームがインクリメントされます。更新された値によって AutoNumber オブジェクトが置き換えられます。

    chapHead.Style = {CounterInc('chapter'), WhiteSpace('preserve')};

このコードは、ドキュメント内の章の見出しに自動で番号を付けます。

import mlreportgen.dom.*;
d = Document('MyReport','html');
 
for rank = 3:5
    chapHead = Heading1('Chapter ','Heading 1');
    append(chapHead,AutoNumber('chapter'));
    append(chapHead,sprintf('. Rank %i Magic Square',rank));
    chapHead.Style = {CounterInc('chapter'), ...
                      WhiteSpace('preserve')};
    append(d,chapHead);
    table = append(d,magic(rank));
    table.Width = '2in';
end
 
close(d);
rptview(d.OutputPath);

階層的な自動番号付けの作成

1.1、1.2、1.3、2.1、2.2 といった階層的な番号付けスキームを作成できます。mlreportgen.dom.CounterReset 書式オブジェクトを使用して、親の番号が変化するときに、子の自動番号を初期値にリセットします。たとえば、次のコードは CounterReset 書式オブジェクトを使用して、各章の先頭で章のテーブル番号ストリームをリセットします。

import mlreportgen.dom.*;
d = Document('MyReport','html');
 
for rank = 3:2:9
    chapHead = Heading(1,'Chapter ');
    append(chapHead, AutoNumber('chapter'));
    chapHead.Style = {CounterInc('chapter'), ...
                      CounterReset('table'), ...
                      WhiteSpace('preserve')};
    append(d,chapHead);
    
    for i = 0:1;
        tableHead = Paragraph('Table ');
        append(tableHead,AutoNumber('chapter'))
        append(tableHead,'.');
        append(tableHead, AutoNumber('table'));
        append(tableHead, ...
           sprintf('. Rank %i Magic Square',rank+i));
        tableHead.Style = {CounterInc('table'), ...
                           Bold, ...
                           FontSize('11pt'), ...
                           WhiteSpace('preserve')};
        append(d,tableHead);
        table = append(d,magic(rank+i));
        table.Width = '2in';
    end
end
 
close(d);
rptview(d.OutputPath);

パーツ テンプレートを使用したコンテンツへの自動番号付け

Microsoft® Word、HTML、PDF の自動番号付けを含むテンプレートを基にドキュメント パーツ オブジェクトを作成し、ドキュメントにパーツを繰り返し追加することで、ドキュメントへの自動番号付けができます。

Word レポートの自動番号付け

章のパーツ テンプレート Chapter を、Word の MyReportTemplate.dotx レポート テンプレートのパーツ テンプレート ライブラリに追加するとします。このテンプレートは Word シーケンス (SEQ) フィールドを使用して、章の見出しに番号を付けます。テンプレートには章タイトルと章のコンテンツのためのホールも含まれています。

このコードは章のパーツ テンプレートを使用して、番号付けされた章を作成します。このコードの最後のステートメントは、レポートを Word で開いて更新します。レポートを更新すると、Word によって SEQ フィールドが章の番号に置き換えられます。

import mlreportgen.dom.*
doctype = 'docx';
d = Document('MyReport',doctype,'MyReportTemplate');

for rank = 3:5
    chapterPart = DocumentPart(d,'Chapter');
    while ~strcmp(chapterPart.CurrentHoleId,'#end#')
       switch chapterPart.CurrentHoleId
           case 'ChapterTitle'
              append(chapterPart, ...
                 sprintf('Rank %i Magic Square',rank));
           case 'ChapterContent'
              table = append(chapterPart,magic(rank));
              table.Width = '2in';
       end
       moveToNextHole(chapterPart);
    end
    append(d, chapterPart);
end

close(d);
rptview(d.OutputPath);

HTML レポートの自動番号付け

HTML レポートの自動番号付けを作成するには、counter-increment プロパティを使用するドキュメント パーツを作成して、スタイル シートでカウンターを定義します。たとえば、Word レポートの自動番号付けで使用されているのと同じプログラムを使用するドキュメント パーツを作成するには、このコードのようなドキュメント パーツ テンプレートをHTML ドキュメント ライブラリに作成します。このコードは chapter カウンターを定義してクラス an_chapter を指定することで、自動番号を適用します。これによって、プログラムで処理されるタイトルとコンテンツを入れるホールも定義されます。

<dptemplate name="Chapter">
      <p style="counter-increment:chapter;"><span>Chapter </span>
           <span class="an_chapter"></span> 
      <hole id="ChapterTitle" /></p>
      <hole id="ChapterContent" />
 </dptemplate>

スタイルシートで an_chapter クラスを定義します。content プロパティを使用して、コンテンツとして chapter カウンターを定義します。

span.an_chapter:before {
content: counter(chapter);
}

Word に使用したものと同じプログラムを、doctype の値を 'html' に変更して使用します。

PDF レポートの自動番号付け

PDF での自動番号の作成は HTML に似ていますが、自動番号付けを単純化する PDF テンプレート用の HTML 要素 <autonumber> が DOM API に用意されている点が異なります。autonumber 要素の stream-name 属性を指定します。ストリームの名前に counter-increment プロパティの値を使用します。この場合は chapter です。

<dptemplate name="Chapter">
    <p style="counter-increment:chapter;"><span>Chapter </span>
          <autonumber stream-name="chapter"/> 
       <hole id="ChapterTitle" /></p>
       <hole id="ChapterContent" />
 </dptemplate>

自動番号を使用するために、スタイル シートにプロパティを追加する必要はありません。

Word に使用したのと同じプログラムを、doctype の値を 'pdf' に変更して使用します。

参考

関数

クラス