CellDingbat математикалық сессияларының жай-күйін есте сақтау

StyleData [«Item»] -дан иемденетін StyleData [«Қалыпты»] қосу үшін менің ноутбегімнің стиль кестесін өзгертіп алдым. Ол ұяшық дингбатын құсбелгіге өзгертеді. Стильдер редакторында:

Cell[StyleData["ToDo", StyleDefinitions -> StyleData["Item"]], 
  CellDingbat->DynamicModuleBox[{$CellContext`color$$}, 
    CheckboxBox[
    Dynamic[$CellContext`color$$], {RGBColor[1, 0.5, 0],RGBColor[0,Rational[2, 3], 0]},    
    Background -> Dynamic[$CellContext`color$$]], 
    DynamicModuleValues :> {}
  ],
]

Мәселе, жазу кітапшасында пайдаланылған кездегі құсбелгі күйі математика сеанстары арасында сақталмаған. Мен DynamicModule [] деп ойладым. Оның күйін қалай есте сақтау үшін құсбелгісін қалай аламын?

ӨҢДЕУ

Simon шешімі құсбелгінің күйін сақтайды, бірақ CellDingbat (MacOS X) ретінде пайдаланылғанда құсбелгі қойылады. Симон кодын CellFrameLabels параметрлеріне енгізу әдісті жасайды және CellDingbat әдепкі «Item» элементін сақтайды. Міне, мен:

Cell[StyleData["ToDo", StyleDefinitions -> StyleData["Item"]],
 CellFrameLabels->{{
    ButtonBox[
     CheckboxBox[False], ButtonFunction :> (SelectionMove[
        ButtonNotebook[], All, ButtonCell]; 
      With[{$CellContext`new = ReplaceAll[
           Options[
            NotebookSelection[
             ButtonNotebook[]], CellFrameLabels], CheckboxBox[
             Pattern[$CellContext`x, 
              Alternatives[True, False]]] :> CheckboxBox[
             Not[$CellContext`x]]]}, 
        SetOptions[
         NotebookSelection[
          ButtonNotebook[]], $CellContext`new]]; SelectionMove[
        ButtonNotebook[], After, CellContents]), Appearance -> None, 
     Method -> "Preemptive", Evaluator -> Automatic], None}, {
   None, None}},
 MenuSortingValue->1621]
8
Жоғарыдағы кодты жапқан кезде «Бас символы бар дұрыс емес пішімделген директива» деген хабар алдым. Бұл күтілуде ме?
қосылды автор Mr.Wizard, көзі
Қиын. Cell параметрін CellContext-> Cell орнатсаңыз, $ CellContext`color $$ дегенді colors арқылы ауыстыруға болады >
қосылды автор Sjoerd C. de Vries, көзі
@Мырза. Мен де солай алдым.
қосылды автор JxB, көзі

1 жауаптар

Кодыңызбен проблема (менің ойымша) жаңа «ToDo» ұяшығын жасаған сайын жаңа DynamicModule құрылмайды. Сондықтан Checkbox әрқайсысының жағдайы сақталмайды.

Checkbox күйін сақтауға арналған әрбір «ToDo» ұяшығына арналған қарапайым шешім - бұл CellDingbat деген бірінші рет Checkbox код> белсендірілген. (Мен ойнаған басқа нұсқалар TaggingRules қолданды, «ToDo» және «ToDone» стильдерінің арасында ауысу және т.б. ...)

Алайда, CellDingbat ішіндегі Checkbox жазықтығы тіпті өзінің күйін сақтамайды - келесі әрекеттерді орындап көріңіз, содан кейін Expression Express көрсету циклін қараңыз.

CellPrint[Cell["test", "Text", CellDingbat -> ToBoxes[Checkbox[]]]]

Бұл жағдайды шешу үшін, күйді өзгертетін түймешікте оралған True немесе False анық дәлелімен Checkbox пайдаланылды. Бұл ақылсыз және тиімсіз, бірақ ол жұмыс істейді!

Мәселен, ұяшық стиліне арналған код

Cell[StyleData["ToDo", StyleDefinitions -> StyleData["Item"]],
 CellDingbat -> ButtonBox[CheckboxBox[False], 
   ButtonFunction :> (SelectionMove[ButtonNotebook[], All, ButtonCell]; 
     With[{$CellContext`new = ReplaceAll[
          Options[NotebookSelection[ButtonNotebook[]], CellDingbat], 
          CheckboxBox[Pattern[$CellContext`x, Alternatives[True, False]]] :> CheckboxBox[Not[$CellContext`x]]]}, 
        SetOptions[NotebookSelection[ButtonNotebook[]], $CellContext`new]]; 
      SelectionMove[ButtonNotebook[], After, CellContents]), 
    Appearance -> None, Method -> "Preemptive", Evaluator -> Automatic]]

Screenshota

Мен бұл шешімге риза емеспін, бірақ бұл менің ең жақсы шешімім. Түйме функция кодын әрбір ұяшыққа тексерілген ToDo ұяшығына қайталанбауы үшін ұяшықтан жылжыту жақсарады. Сондай-ақ, оны ReplaceAll жоқ іске қосу үшін, ядро ​​қажет емес және функцияны тек фрондимен қолдануға болады.

3
қосылды
@JxB: Мен үшін жақсы көрінеді - бірақ әртүрлі операциялық жүйелер бұл заттарды басқаша көрсетеді. Мен өзімнің жүйемдегі экран суретін жарияладым (Ubuntu 11.10, Mathematica 8.01)
қосылды автор Simon, көзі
Бұл жақын. Құсбелгісі қойылса, үстіңгі жағы қиылады, және де құсбелгі. Мен түймелерге, ұяшыққа, құсбелгіге көптеген толтырғыштар, маржа және өлшем опцияларын көрдім.
қосылды автор JxB, көзі
CellFrameLabels пайдалану. Жоғарыдағы түзетуді қараңыз.
қосылды автор JxB, көзі