一体何が正しいのでしょうか…。
以前こんな記事を書いたのですが、reference.docxをあらかじめ作っておく場合と-t docx でファイルを出力した場合とで、実際にはどの程度の差があるのかを見ておきます。
あらかじめ、適当な入力ファイル(空でも良い)から -t docx -o test.docx で test.docx という名前でファイルを保存しておきます。Rのofficerパッケージでスタイルを確認できるのでこれを使います。結果はdata.frameになっているので、dplyrパッケージで差分を確認できます。
> library(officer) > library(magrittr) > officer::read_docx("test.docx") %>% officer::styles_info() style_type style_id style_name is_custom is_default 1 paragraph Normal Normal FALSE TRUE 2 paragraph BodyText Body Text FALSE FALSE 3 paragraph FirstParagraph First Paragraph TRUE FALSE 4 paragraph Compact Compact TRUE FALSE 5 paragraph Title Title FALSE FALSE 6 paragraph Subtitle Subtitle FALSE FALSE 7 paragraph Author Author TRUE FALSE 8 paragraph Date Date FALSE FALSE 9 paragraph Abstract Abstract TRUE FALSE 10 paragraph Bibliography Bibliography FALSE FALSE 11 paragraph Heading1 Heading 1 FALSE FALSE 12 paragraph Heading2 Heading 2 FALSE FALSE 13 paragraph Heading3 Heading 3 FALSE FALSE 14 paragraph Heading4 Heading 4 FALSE FALSE 15 paragraph Heading5 Heading 5 FALSE FALSE 16 paragraph Heading6 Heading 6 FALSE FALSE 17 paragraph Heading7 Heading 7 FALSE FALSE 18 paragraph Heading8 Heading 8 FALSE FALSE 19 paragraph Heading9 Heading 9 FALSE FALSE 20 paragraph BlockText Block Text FALSE FALSE 21 paragraph FootnoteText Footnote Text FALSE FALSE 22 character DefaultParagraphFont Default Paragraph Font FALSE TRUE 23 table Table Table FALSE TRUE 24 paragraph DefinitionTerm Definition Term TRUE FALSE 25 paragraph Definition Definition TRUE FALSE 26 paragraph Caption Caption FALSE FALSE 27 paragraph TableCaption Table Caption TRUE FALSE 28 paragraph ImageCaption Image Caption TRUE FALSE 29 paragraph Figure Figure TRUE FALSE 30 paragraph CaptionedFigure Captioned Figure TRUE FALSE 31 character BodyTextChar Body Text Char TRUE FALSE 32 character VerbatimChar Verbatim Char TRUE FALSE 33 character FootnoteReference Footnote Reference FALSE FALSE 34 character Hyperlink Hyperlink FALSE FALSE 35 paragraph TOCHeading TOC Heading FALSE FALSE 36 paragraph SourceCode Source Code TRUE FALSE 37 character KeywordTok KeywordTok TRUE FALSE 38 character DataTypeTok DataTypeTok TRUE FALSE 39 character DecValTok DecValTok TRUE FALSE 40 character BaseNTok BaseNTok TRUE FALSE 41 character FloatTok FloatTok TRUE FALSE 42 character ConstantTok ConstantTok TRUE FALSE 43 character CharTok CharTok TRUE FALSE 44 character SpecialCharTok SpecialCharTok TRUE FALSE 45 character StringTok StringTok TRUE FALSE 46 character VerbatimStringTok VerbatimStringTok TRUE FALSE 47 character SpecialStringTok SpecialStringTok TRUE FALSE 48 character ImportTok ImportTok TRUE FALSE 49 character CommentTok CommentTok TRUE FALSE 50 character DocumentationTok DocumentationTok TRUE FALSE 51 character AnnotationTok AnnotationTok TRUE FALSE 52 character CommentVarTok CommentVarTok TRUE FALSE 53 character OtherTok OtherTok TRUE FALSE 54 character FunctionTok FunctionTok TRUE FALSE 55 character VariableTok VariableTok TRUE FALSE 56 character ControlFlowTok ControlFlowTok TRUE FALSE 57 character OperatorTok OperatorTok TRUE FALSE 58 character BuiltInTok BuiltInTok TRUE FALSE 59 character ExtensionTok ExtensionTok TRUE FALSE 60 character PreprocessorTok PreprocessorTok TRUE FALSE 61 character AttributeTok AttributeTok TRUE FALSE 62 character RegionMarkerTok RegionMarkerTok TRUE FALSE 63 character InformationTok InformationTok TRUE FALSE 64 character WarningTok WarningTok TRUE FALSE 65 character AlertTok AlertTok TRUE FALSE 66 character ErrorTok ErrorTok TRUE FALSE 67 character NormalTok NormalTok TRUE FALSE
こちらはマニュアルのとおりにテンプレートを生成した場合のテンプレートに含まれるスタイルの一覧。
> officer::read_docx("custom-reference.docx") %>% officer::styles_info() style_type style_id style_name is_custom is_default 1 paragraph Normal Normal FALSE TRUE 2 paragraph BodyText Body Text FALSE FALSE 3 paragraph FirstParagraph First Paragraph TRUE FALSE 4 paragraph Compact Compact TRUE FALSE 5 paragraph Title Title FALSE FALSE 6 paragraph Subtitle Subtitle FALSE FALSE 7 paragraph Author Author TRUE FALSE 8 paragraph Date Date FALSE FALSE 9 paragraph Abstract Abstract TRUE FALSE 10 paragraph Bibliography Bibliography FALSE FALSE 11 paragraph Heading1 Heading 1 FALSE FALSE 12 paragraph Heading2 Heading 2 FALSE FALSE 13 paragraph Heading3 Heading 3 FALSE FALSE 14 paragraph Heading4 Heading 4 FALSE FALSE 15 paragraph Heading5 Heading 5 FALSE FALSE 16 paragraph Heading6 Heading 6 FALSE FALSE 17 paragraph Heading7 Heading 7 FALSE FALSE 18 paragraph Heading8 Heading 8 FALSE FALSE 19 paragraph Heading9 Heading 9 FALSE FALSE 20 paragraph BlockText Block Text FALSE FALSE 21 paragraph FootnoteText Footnote Text FALSE FALSE 22 character DefaultParagraphFont Default Paragraph Font FALSE TRUE 23 table Table Table FALSE TRUE 24 paragraph DefinitionTerm Definition Term TRUE FALSE 25 paragraph Definition Definition TRUE FALSE 26 paragraph Caption Caption FALSE FALSE 27 paragraph TableCaption Table Caption TRUE FALSE 28 paragraph ImageCaption Image Caption TRUE FALSE 29 paragraph Figure Figure TRUE FALSE 30 paragraph CaptionedFigure Captioned Figure TRUE FALSE 31 character BodyTextChar Body Text Char TRUE FALSE 32 character VerbatimChar Verbatim Char TRUE FALSE 33 character FootnoteReference Footnote Reference FALSE FALSE 34 character Hyperlink Hyperlink FALSE FALSE 35 paragraph TOCHeading TOC Heading FALSE FALSE
で、これだと差分が良くわからないので、dplyr::anti_join()
を使って差分を出します。
library(dplyr) > dplyr::anti_join(gendoc, refdoc) Joining, by = c("style_type", "style_id", "style_name", "is_custom", "is_default") style_type style_id style_name is_custom is_default 1 paragraph SourceCode Source Code TRUE FALSE 2 character KeywordTok KeywordTok TRUE FALSE 3 character DataTypeTok DataTypeTok TRUE FALSE 4 character DecValTok DecValTok TRUE FALSE 5 character BaseNTok BaseNTok TRUE FALSE 6 character FloatTok FloatTok TRUE FALSE 7 character ConstantTok ConstantTok TRUE FALSE 8 character CharTok CharTok TRUE FALSE 9 character SpecialCharTok SpecialCharTok TRUE FALSE 10 character StringTok StringTok TRUE FALSE 11 character VerbatimStringTok VerbatimStringTok TRUE FALSE 12 character SpecialStringTok SpecialStringTok TRUE FALSE 13 character ImportTok ImportTok TRUE FALSE 14 character CommentTok CommentTok TRUE FALSE 15 character DocumentationTok DocumentationTok TRUE FALSE 16 character AnnotationTok AnnotationTok TRUE FALSE 17 character CommentVarTok CommentVarTok TRUE FALSE 18 character OtherTok OtherTok TRUE FALSE 19 character FunctionTok FunctionTok TRUE FALSE 20 character VariableTok VariableTok TRUE FALSE 21 character ControlFlowTok ControlFlowTok TRUE FALSE 22 character OperatorTok OperatorTok TRUE FALSE 23 character BuiltInTok BuiltInTok TRUE FALSE 24 character ExtensionTok ExtensionTok TRUE FALSE 25 character PreprocessorTok PreprocessorTok TRUE FALSE 26 character AttributeTok AttributeTok TRUE FALSE 27 character RegionMarkerTok RegionMarkerTok TRUE FALSE 28 character InformationTok InformationTok TRUE FALSE 29 character WarningTok WarningTok TRUE FALSE 30 character AlertTok AlertTok TRUE FALSE 31 character ErrorTok ErrorTok TRUE FALSE 32 character NormalTok NormalTok TRUE FALSE
となります。スタイル名がTok
で終わるものはコードのハイライト用の文字スタイルになり、全部で31種類あります。
> dplyr::anti_join(gendoc, refdoc) %>% filter(str_detect(.$style_name, "Tok")) %>% count() Joining, by = c("style_type", "style_id", "style_name", "is_custom", "is_default") # A tibble: 1 x 1 n <int> 1 31
残る1つは"Source Code"でこれは段落スタイル。これがテンプレートを生成した際に含まれないスタイルです。これはマニュアルにも載っていません。
さて、スタイル一覧はマニュアルに記載がありますが、このマニュアルにあってPandocのHaskellのコードからは読み取れなかったスタイルは以下の2つです。単に私の抜けかもしれないですが…。
Caption
Default Paragraph Font
また、ソースコードに記載があるが、-t docx を指定して生成したdocx、reference.docx に存在しないスタイルは下記の2つです。
CommentText
CommentReference
実際のスタイル名は" "で分かれていると思いますが、文字列としてコードにあるのはこちらでした。
この辺りは想定しているものと同じになっているのかがわからないので、discussで聞いてみようと思って1週間が経ちました。そろそろ聞きますね…。
2022/12/12 補足
結局聞いてないわこれ・・・。
気づいた点として、Default Paragraph Font
は文字スタイルなので、段落スタイルの Normal
の文字スタイル分だと考えられます(styles.xmlを読めばわかりそう)また、CommentText
はWordにコメントを挿入したときに使うものかなと思いますが、それを追加してもPandocから出力されたファイルには存在しないのでよくわかりません・・・。