ベリサリウスが基本的な方法を示しました。あなたは学びたがっているように見えるので、私は高度な方法を紹介します。
最初に、私が信じていたのはあなたのコードの単純化であると私が見たと言わせてください、そして私はそれらを、うまくいけば間違いではないように作りました。
このサンプルデータを以下の図で使用します。
data = Prepend[
RandomInteger[99, {5, 12}],
DateString[{1, #}, "MonthName"] & /@ Range@12
];
目標
使用される主な機能はGrid、オプションを渡すことを許可することは理にかなっています。
テーブルを定義する一連のオプションがあります。これらを便利に変更できるようにしたいと思います。
が理解できないカスタムオプションの可能性が欲しいGrid。
実装
目標#1
opts:OptionsPattern[]引数の任意のシーケンスに一致する引数パターンが追加され、Option -> Setting名前が付けられoptsます。(詳細については、 OptionsPatternを参照してください。)次に、optsのその他のオプションの前に、基本関数に挿入されますGrid。これにより、明示的に指定されたオプションでデフォルトをオーバーライドしたり、新しいオプションを指定したりできます。
customTabular[data_, opts : OptionsPattern[]] :=
Grid[MapAt[Rotate[#, 90 Degree] & /@ # &, data, 1],
opts,
Background -> {{{White, Pink}}},
Dividers -> {All, {2 -> True}},
ItemSize -> {1 -> 5},
Alignment -> {Center, {1 -> Top}},
Frame -> True,
FrameStyle -> Thickness[2],
ItemStyle -> Directive[FontSize -> 15, Black, Bold]
] // Text
例:
customTabular[data]

customTabular[data, Background -> LightBlue]

目標#2
表形式を定義するオプションは、関数本体から分離できます。これにより、それらを便利に変更または参照できるようになります。まず、前の定義を。でクリアしClearAllます。Options次に、デフォルトを設定しcustomTabularます。
ClearAll[customTabular]
Options[customTabular] =
{Background -> {{{White, Pink}}},
Dividers -> {All, {2 -> True}},
ItemSize -> {1 -> 5},
Alignment -> {Center, {1 -> Top}},
Frame -> True,
FrameStyle -> Thickness[2],
ItemStyle -> Directive[FontSize -> 15, Black, Bold]};
これで機能は適切になりました。Options@customTabular上記のルールを取得します。
customTabular[data_, opts : OptionsPattern[]] :=
Grid[MapAt[Rotate[#, 90 Degree] & /@ # &, data, 1],
opts,
Sequence @@ Options@customTabular
] // Text
これで、。を使用してデフォルトを簡単に変更できますSetOptions。例:
SetOptions[customTabular,
Background -> {{{LightMagenta, LightOrange}}}
];
customTabular[data]

目標#3
次に、に渡されないオプションを追加しますGrid。"Rotation"タイトル行のテキストの回転を変更することにしました。
ここでも、以前の定義とデフォルトのオプションをクリアします。リストに含まれていることに注意"Rotation" -> 90 Degreeしてください。
ClearAll[customTabular]
Options[customTabular] =
{Background -> {{{White, Pink}}},
Dividers -> {All, {2 -> True}},
ItemSize -> {1 -> 5},
Alignment -> {Center, {1 -> Top}},
Frame -> True,
FrameStyle -> Thickness[2],
ItemStyle -> Directive[FontSize -> 15, Black, Bold],
"Rotation" -> 90 Degree};
ここで、この新しいオプションを使用する方法が必要です。また、このオプションが次の宛先に送信されないようにする方法が必要ですGrid。
最初に、明示的なオプションをリストの先頭に結合して、Options@customTabularデフォルトをオーバーライドします。
customTabular[data_, opts : OptionsPattern[]] :=
Grid[MapAt[Rotate[#, OptionValue["Rotation"]] & /@ # &, data, 1],
Sequence @@ FilterRules[{opts} ~Join~ Options@customTabular, Options@Grid]
] // Text
例:
SetOptions[customTabular, Background -> {{{LightBrown, LightYellow}}}];
customTabular[data,
Dividers -> All,
"Rotation" -> -90 Degree,
FrameStyle -> {Darker@Red, Thick}
]
