2012-01-25 9 views
5

Ho lavorato su come ottenere numerati etichette cellula-telaio seguendo il consiglio grande in altre risposteCome compilare CellFrameLabels negli stili di Mathematica Notebook?

Extending cell definition to CellFrameLabels definition

How to Autonumber Cell Tags in Mathematica Notebooks?

e sono quasi. Volevo aggiungere numeri di sezione agli stili di sezione nel foglio di stile Colori creativi/pastello. Ho creato un nuovo notebook (ecco una copia sul mio set pubblica)

http://dl.dropbox.com/u/1997638/CellFrameMargins.nb

andato a menu "Formato", scegliere "stylesheet \ creativo \ PastelColor", quindi "Format" "Modifica foglio di stile", " Scegli uno stile: Sezione ", quindi fai clic su Creativo \ Pastelcolor.nb nella parte superiore della finestra di dialogo di modifica del foglio di stile.

Questo apre un altro editor di fogli di stile e vado al quarto elemento in basso "Stili per celle titolo e sezione", quindi il secondo elemento in "Sezione". Mettere mirino del mouse in là e fare clic su, quindi selezionare il menu "Cell", "Mostra Expression" voce, che rivela la seguente espressione:

Cell[StyleData["Section"], 
CellFrame->{{0, 0}, {1, 3}}, 
CellFrameColor->RGBColor[1., 0.819608, 0.658824], 
FontFamily->"Helvetica", 
FontSize->18, 
FontWeight->"Bold", 
FontColor->RGBColor[0.882353, 0.419608, 0.0784314], 
Background->RGBColor[1., 0.886275, 0.741176]] 

GRANDE! Rivela tutti i dettagli, o almeno così pensavo. In particolare, l'elemento CellFrame mi fornisce le informazioni {{0, 0}, {1, 3}} necessarie per allineare le etichette dei frame cella con lo stile Section. Ok, in modo da tornare alla finestra di editor di steylsheet per il mio notebook, e in seguito le risposte di cui sopra, ho tipo

Cell[ 
StyleData["Section"], 
CellFrameLabelMargins -> 0, 
    CellFrameLabels-> { { 
    Cell[ 
    TextData[{ "§", CounterBox["Section"], ": " }], 
    "SectionLabel", 
    CellFrame -> {{0, 0}, {1, 3}}, 
    CellFrameMargins -> 4 
    ] (* left label *), 
    Inherited (* right label *) }, 
    {Inherited (* bottom label *), 
    Inherited (* top label *) } } ] 

Il CellFrameMargins -> 4 regola che ho trovato per tentativi ed errori è necessario per allineare la parte superiore e inferiore del frame cella con il resto dello stile Section a destra. Sono triste nel dire che funziona quasi per davvero. Ci sono degli spazi tra il testo di CellFrameLabels e i frame e voglio riempire queste lacune. È come se i caratteri in CellFrameLabels non si estendessero e si abbassassero abbastanza, anche se sono esattamente uguali ai caratteri nelle celle della sezione. Non riesco a trovare un modo per riempire lo sfondo dietro le etichette. Ho provato Background -> RGBColor[...], ho provato a mettere in caratteri espliciti, ho provato a impostare CellFrameMargins e CellFrameLabelMargins, in molte combinazioni, ma senza successo.

Sono perplesso e gradirei qualsiasi consiglio.

Screenshot

risposta

4

Questo sembra funzionare per lo stile di pastello. Ciò che fa è mettere l'etichetta all'interno di una cornice. Ho dovuto armeggiare un po 'con lo ImageMargins e lo FrameMargins dello FrameBox per allineare tutto.

Cell[StyleData["Section"], 
CellFrameLabels->{{ 
    Cell[ 
    BoxData[ 
    FrameBox[ 
    TemplateBox[{"§", CounterBox["Section"], ": "}, 
     "Row", 
     DisplayFunction->(RowBox[{#, " ", #2}]&) 
    ], 
    ImageMargins->-1, 
    Background->RGBColor[1., 0.886275, 0.741176], 
    FrameStyle->RGBColor[1., 0.886275, 0.741176], 
    FrameMargins->2 
    ] 
    ], 
    "SectionLabel", CellFrame -> {{0, 0}, {1, 3}}, 
    CellFrameMargins->0 
    ], Inherited}, 
    {Inherited, Inherited}}, 
CellFrameLabelMargins->0 
] 

Screenshot: screen shot

+1

molto bello! Mi dà anche molte nuove cose con cui giocare –