Stile didascalia

  • Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 19 anni, 6 mesi fa da DMW.
  • Creatore
    Topic
  • #13100
    DMW
      Up
      0
      Down
      ::


      Ragazzi,

      Mi serve un piccolo favore. Io vorrei cambiare lo stile della caption. Vorrei mettere una linea sotto alla testa della caption.

      Ad esempio invece di avere la normale caption vorrei

      |1cm| Figura 3: dida
      ——————–

      cioè con un rule che oltre a stare sotto Figura 3, sfori di un centimetro nel margine di sinistra.

      Purtroppo un mio prof. mi ha chiesto lo stesso layout del libro Microwave Engineering, che è chiaramente scritto in latex. Che ci posso fare.

      Ciao

      Andrea

    Visualizzazione 4 filoni di risposte
    • Autore
      Risposte
      • #13101
        Up
        0
        Down
        ::

        Ragazzi,

        Mi serve un piccolo favore. Io vorrei cambiare lo stile della caption. Vorrei mettere una linea sotto alla testa della caption.

        Ad esempio invece di avere la normale caption vorrei

        |1cm| Figura 3: dida
        ——————–

        cioè con un rule che oltre a stare sotto Figura 3, sfori di un centimetro nel margine di sinistra.

        Purtroppo un mio prof. mi ha chiesto lo stesso layout del libro Microwave Engineering, che è chiaramente scritto in latex. Che ci posso fare.

        Qualcosa come questo?
        `\makeatletter
        \def\line@under@label#1#2{%
        \dimen@=#1 \advance\dimen@ 1cm
        \vtop{\hbox{\strut#2}\nointerlineskip
        \hbox to #1{\hss\vrule width \dimen@ height 0.4pt}\vss}}
        \long\def\@makecaption#1#2{%\small
        \vskip\abovecaptionskip
        \sbox0{#1:\enspace}%
        \hangindent\wd0 \hangafter1
        \sbox2{#1:}%
        \leavevmode\line@under@label{\wd2}{#1:}\enspace #2\par
        \vskip\belowcaptionskip}
        \makeatother`
        Se vuoi un font più piccolo (cosa che ti consiglio), togli il % davanti a \small.

        Avanzo una birra. 😀

        Ciao
        Enrico

        [corr]Due spazi sono diventati \enspace, è meglio perché si evita che lo spazio dopo i due punti possa “ingrandirsi” durante l’impaginazione.[/corr]

      • #13102
        DMW
          Up
          0
          Down
          ::

          Ragazzi,

          Mi serve un piccolo favore. Io vorrei cambiare lo stile della caption. Vorrei mettere una linea sotto alla testa della caption.

          Ad esempio invece di avere la normale caption vorrei

          |1cm| Figura 3: dida
          ——————–

          cioè con un rule che oltre a stare sotto Figura 3, sfori di un centimetro nel margine di sinistra.

          Purtroppo un mio prof. mi ha chiesto lo stesso layout del libro Microwave Engineering, che è chiaramente scritto in latex. Che ci posso fare.

          Qualcosa come questo?
          `\makeatletter
          \def\line@under@label#1#2{%
          \dimen@=#1 \advance\dimen@ 1cm
          \vtop{\hbox{\strut#2}\nointerlineskip
          \hbox to #1{\hss\vrule width \dimen@ height 0.4pt}\vss}}
          \long\def\@makecaption#1#2{%\small
          \vskip\abovecaptionskip
          \sbox0{#1:\enspace}%
          \hangindent\wd0 \hangafter1
          \sbox2{#1:}%
          \leavevmode\line@under@label{\wd2}{#1:}\enspace #2\par
          \vskip\belowcaptionskip}
          \makeatother`
          Se vuoi un font più piccolo (cosa che ti consiglio), togli il % davanti a \small.

          Avanzo una birra. 😀

          Ciao
          Enrico

          [corr]Due spazi sono diventati \enspace, è meglio perché si evita che lo spazio dopo i due punti possa “ingrandirsi” durante l’impaginazione.[/corr]

          Ma come cavolo fai!! 😀 😀 😀

          Una birra? Ma pure 100.

          Ciao e grazie.

          Andrea

        • #13103
          DMW
            Up
            0
            Down
            ::


            Leggendo il codice, ti dico che è non molto difficile da capire, anche se non mi sarebbe venuto mai in mente.

            Vorrei qualche chiarimento.

            Nella prima definizione
            `
            \def\line@under@label#1#2{%
            \dimen@=#1 \advance\dimen@ 1cm
            \vtop{\hbox{\strut#2}\nointerlineskip
            \hbox to #1{\hss\vrule width \dimen@ height 0.4pt}\vss}}`

            Non ho capito solo cosa fa \vtop e quale è il ruolo di \strut; per il resto è tutto semplice.

            Nella seconda definizione
            `
            \long\def\@makecaption#1#2{%\small
            \vskip\abovecaptionskip
            \sbox0{#1:\enspace}% [1]
            \hangindent\wd0 \hangafter1 [2]
            \sbox2{#1:}% [3]
            \leavevmode\line@under@label{\wd2}{#1:}\enspace #2\par
            \vskip\belowcaptionskip}`

            non ho capito cosa fanno le righe [1], [2] e [3] ed il ruolo di \leavevmode tra la riga [3] e
            \line@under@label. Per ultimo ti chiedo quale è la differenza tra \def e \long\def.

          • #13104
            Up
            0
            Down
            ::

            [quote]Ragazzi,

            Mi serve un piccolo favore. Io vorrei cambiare lo stile della caption. Vorrei mettere una linea sotto alla testa della caption.

            Ad esempio invece di avere la normale caption vorrei

            |1cm| Figura 3: dida
            ——————–

            cioè con un rule che oltre a stare sotto Figura 3, sfori di un centimetro nel margine di sinistra.

            Purtroppo un mio prof. mi ha chiesto lo stesso layout del libro Microwave Engineering, che è chiaramente scritto in latex. Che ci posso fare.

            Qualcosa come questo?
            `\makeatletter
            \def\line@under@label#1#2{%
            \dimen@=#1 \advance\dimen@ 1cm
            \vtop{\hbox{\strut#2}\nointerlineskip
            \hbox to #1{\hss\vrule width \dimen@ height 0.4pt}\vss}}
            \long\def\@makecaption#1#2{%\small
            \vskip\abovecaptionskip
            \sbox0{#1:\enspace}%
            \hangindent\wd0 \hangafter1
            \sbox2{#1:}%
            \leavevmode\line@under@label{\wd2}{#1:}\enspace #2\par
            \vskip\belowcaptionskip}
            \makeatother`
            Se vuoi un font più piccolo (cosa che ti consiglio), togli il % davanti a \small.

            Avanzo una birra. 😀

            Ciao
            Enrico

            [corr]Due spazi sono diventati \enspace, è meglio perché si evita che lo spazio dopo i due punti possa “ingrandirsi” durante l’impaginazione.[/corr]

            Ma come cavolo fai!! 😀 😀 😀 [/quote]
            Adesso vediamo di capire come funziona la faccenda. La prima cosa da sapere è che il comando \@makelabel è responsabile della composizione della didascalia. Prende due argomenti passati da \caption: il primo è “\figurename “, il secondo è il testo della didascalia. Chiamo il primo argomento “etichetta”.

            A questo punto decidiamo che il testo della didascalia sia un paragrafo che abbia il margine sinistro alla fine dell’etichetta seguita da due punti e uno spazio. Per fare questo misuro la lunghezza necessaria:
            `\sbox0{#1:\enspace}`
            cioè nel registro box 0 metto una scatola contenente l’etichetta, i due punti e uno spazio fisso di mezzo em. Posso accedere alla sua lunghezza con la dimensione \wd0. Perciò compongo il paragrafo (che è l’intera didascalia) con rientro di \wd0 dopo la prima riga:
            `\hangindent\wd0 \hangafter 1`
            Prima di comporre il paragrafo, misuro l’etichetta (si potrebbe fare meglio, forse, ma così funziona) con i due punti, con lo stesso sistema di prima. Mi serve per passare la lunghezza a un’altra macro, che compone l’etichetta con la linea sotto.

            La macro si chiama \line@under@label, che ha due argomenti: una dimensione e un testo. Compongo il tutto in una \vtop (che assomiglia a \parbox[t], cioè risulterà con il punto di riferimento alla stessa altezza della linea di base della prima riga). Questa \vtop contiene due scatole orizzontali: la prima è l’etichetta con i due punti. Segue il comando per non inserire interlinea (\nointerlineskip) e poi la seconda scatola orizzontale, che contiene la linea; ancora segue \vss, in modo che la seconda scatola non influisca sulla profondità della \vtop.

            Come costruisco la linea? Con una \hbox di ampiezza uguale a quella del primo argomento (che poi è la lunghezza dell’etichetta con i due punti). Però voglio che la linea sia un centimetro più lunga. Quindi dico che il registro dimensionale \dimen@ sia quella lunghezza più un centimetro.

            Il problema è di comporre la linea in modo che sbordi a sinistra, ma “invisibilmente”. Se x è l’ampiezza dell’etichetta e y quella della linea, ciò si ottiene dicendo
            `\hbox to {\hss\vrule width height .4pt}`
            La scatola sarà vista come di lunghezza x, ma contiene una linea di lunghezza y che sborda a sinistra (\hss dice: aggiungi tutto lo spazio, positivo o negativo, che serve).

            Ultima cosa: comporre la didascalia. Dico \leavevmode, per cominciare il paragrafo (\caption ha già detto che qui non c’è rientro \parindent), compongo l’etichetta con la linea sottostante, lascio mezzo em di spazio e scrivo il testo della didascalia:
            `\leavevmode\line@under@label{\wd2}{#1:}\enspace #2\par`
            In testa e in coda al tutto ho messo le spaziature verticali usuali (\abovecaptionskip e \belowcaptionskip).

            Unica limitazione: non puoi usare didascalie che siano più di un paragrafo. Se devi “andare a capo” nella didascalia, userai \\.

            Ciao
            Enrico

          • #13105
            DMW
              Up
              0
              Down
              ::


              Benissimo, molto chiaro.

              Grazie

              Andrea

          Visualizzazione 4 filoni di risposte
          • Devi essere connesso per rispondere a questo topic.

          Go to top