Я прошу прощения за длину этого вопроса. Мой нынешний программный проект Mathematica включает в себя копирование очень специфических бизнес-правил, которые есть в моем учреждении, для графиков временных рядов с качеством публикации. Одно из этих правил заключается в том, что многопанельные графы имеют заголовки панелей и субтитры по центру в верхней части области графика. Это работало нормально, используя Prolog
и Inset
, пока я не переделал этот бит функции, чтобы разрешить включение явных элементов Prolog
. Затем отображается только элемент, переданный в параметре Prolog
, а не заголовки и субтитры панели. Если нет явной опции Prolog
, заголовки и субтитры панели отображаются нормально.
Для более подробного объяснения, представьте, что тело функции находится в большом Module
, включая локальные переменные pl=OptionValue[Prolog]
и mp=OptionValue[MultiPanel]
.
Чуть дальше это определение (ppl
, title
и subtitle
также были определены как локальные переменные, а Rfont
и framecol
- это константы, определенные в других местах пакета, а именно "Arial"
и "Black"
):
ppl=If[mp===False,pl,If[Length[pl]>0,Join[{
If[ToString[subtitle] == "None", Inset[
DisplayForm[GridBox[{{Style[title, 20, FontFamily -> Rfont, framecol]}}]],
Scaled[{0.5,0.96}],{Center,Top} ],
Inset[DisplayForm[
GridBox[{{Style[title, 20, FontFamily -> Rfont, framecol]},
{Style[subtitle, 16, FontFamily -> Rfont, framecol]}},
RowSpacings -> 0]],Scaled[{0.5,0.98}],{Center,Top}] ]},pl],
{If[ToString[subtitle] == "None",
Inset[ DisplayForm[
GridBox[{{Style[title, 20, FontFamily -> Rfont, framecol]}}]],
Scaled[{0.5,0.96}],{Center,Top} ],
Inset[DisplayForm[
GridBox[{{Style[title, 20, FontFamily -> Rfont, framecol]},
{Style[subtitle, 16, FontFamily -> Rfont, framecol]}},
RowSpacings -> 0]],Scaled[{0.5,0.98}],{Center,Top}]] }] ]
Все хорошо, насколько это возможно. Inset
используется, если опция MultiPanel
(и, следовательно, mp
) не является False
, а Prolog
явно не установлено. Но если установлен пролог, например, Prolog -> {Text["test", Scaled[{0.6
, 0.5 }]]}
, то Inset
не отображается, только элемент Text
.
Нет проблем с тем, как я их объединяю. Захват и печать значения ppl
дает:
{Inset[{{Style["This is a test", LineColor -> GrayLevel[0],
FrontFaceColor -> GrayLevel[0], BackFaceColor -> GrayLevel[0],
GraphicsColor -> GrayLevel[0], FontFamily -> "Arial", FontSize -> 20,
FontColor -> GrayLevel[0]]},
{Style["Year-ended percentage change", LineColor -> GrayLevel[0],
FrontFaceColor -> GrayLevel[0], BackFaceColor -> GrayLevel[0],
GraphicsColor -> GrayLevel[0], FontFamily -> "Arial", FontSize -> 16,
FontColor -> GrayLevel[0]]}},
Scaled[{0.5, 0.98}], {Center, Top}], Text["test", Scaled[{0.6, 0.5}]]}
(И да, это куча недокументированных вариантов, о которых я спрошу в другом вопросе.)
Кто-нибудь знает, есть ли что-то, препятствующее Prolog
(или Epilog
в этом отношении) объединению Inset
элементов и других вещей в одном наборе графических опций?