aiuto con \renewcommand

  • Creatore
    Topic
  • #28392
    Up
    0
    Down
    ::


    Questa volta più che esporre un problema chiedo un aiuto per un compito che non sono in grado di fare (non in breve tempo). Insomma vi sfrutto un po’!

    dato che voglio avere i titoletti di capitoli e sezioni (nelle testatine) abbreviati, MA li voglio completi nell’indice ottengo quello che desidero con:

    `
    \section[titolo lungo]{titolo lungo%
    \sectionmark{titolo breve}}
    \sectionmark{titolo breve}
    `
    per le sezioni e:
    `
    \chapter{titolo lungo}
    \chaptermark{titolo corto}
    `
    per i capitoli.

    Dato che ho parecchie sezioni che necessitano di questo trattamento un po’ tedioso.. non è che qualcuno mi sa scrivere un \renewcommand in modo da poter inserire solo \section[corto]{lungo} e \chapter[corto]{lungo} , tenendo conto che [corto] è opzionale?
    (io ci ho provato, ma mi dava errori, non conosco bene il linguaggio…)

    sarebbe davvero comodo.. :p

    grazie infinite!

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #28393
      Up
      0
      Down
      ::

      Questa volta più che esporre un problema chiedo un aiuto per un compito che non sono in grado di fare (non in breve tempo). Insomma vi sfrutto un po’!

      dato che voglio avere i titoletti di capitoli e sezioni (nelle testatine) abbreviati, MA li voglio completi nell’indice ottengo quello che desidero con:

      `
      \section[titolo lungo]{titolo lungo%
      \sectionmark{titolo breve}}
      \sectionmark{titolo breve}
      `
      per le sezioni e:
      `
      \chapter{titolo lungo}
      \chaptermark{titolo corto}
      `
      per i capitoli.

      Dato che ho parecchie sezioni che necessitano di questo trattamento un po’ tedioso.. non è che qualcuno mi sa scrivere un \renewcommand in modo da poter inserire solo \section[corto]{lungo} e \chapter[corto]{lungo} , tenendo conto che [corto] è opzionale?
      (io ci ho provato, ma mi dava errori, non conosco bene il linguaggio…)

      sarebbe davvero comodo.. :p

      La cosa più semplice è ridefinire \@chapter; se usi la classe book (magari avresti potuto dirlo, no?) scrivi nel tuo preambolo
      `\makeatletter
      \def\@chapter[#1]#2{%
      \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
      \refstepcounter{chapter}%
      \typeout{\@chapapp\space\thechapter.}%
      \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#2}%
      \else
      \addcontentsline{toc}{chapter}{#2}%
      \fi
      \else
      \addcontentsline{toc}{chapter}{#2}%
      \fi
      \chaptermark{#1}%
      \addtocontents{lof}{\protect\addvspace{10\p@}}%
      \addtocontents{lot}{\protect\addvspace{10\p@}}%
      \if@twocolumn
      \@topnewpage[\@makechapterhead{#2}]%
      \else
      \@makechapterhead{#2}%
      \@afterheading
      \fi}
      \makeatother`
      Si tratta della definizione della classe book, ma cambiando #1 in #2 dove si dà l’istruzione \addcontentsline

      Ciao
      Enrico

    • #28394
      Up
      0
      Down
      ::


      hai ragione, uso la classe scrbook di Koma-Scripts.

      E per le section?

    • #28395
      Up
      0
      Down
      ::

      hai ragione, uso la classe scrbook di Koma-Scripts.

      E per le section?

      Questo dovrebbe andare bene sia per i capitoli che per le sezioni. Va nel preambolo, naturalmente.
      `\makeatletter
      \let\biasibo@chapter\chapter
      \def\biasibo@@chapter[#1]#2{\biasibo@chapter{#2}\chaptermark{#1}}
      \def\chapter{\@ifnextchar*{\biasibo@chapter}{\@dblarg{\biasibo@@chapter}}}

      \let\biasibo@section\section
      \def\biasibo@@section[#1]#2{\biasibo@section{#2}\sectionmark{#1}}
      \def\section{\@ifnextchar*{\biasibo@section}{\@dblarg{\biasibo@@section}}}
      \makeatother`
      Ciao
      Enrico

    • #28396
      Up
      0
      Down
      ::


      Davvero gentile.

      Aggiungo per i posteri che ho dovuto modificare leggermente la parte relativa a section come segue:

      `
      \let\biasibo@section\section
      \def\biasibo@@section[#1]#2{\biasibo@section[#2]{#2\sectionmark{#1}}\sectionmark{#1}}
      \def\section{\@ifnextchar*{\biasibo@section}{\@dblarg{\biasibo@@section}}}
      \makeatother
      `

      e cioè aggiungendo [#2] nel comando opzionale e un altro \sectionmark{#1} all’interno dell’argomento principale. Questo pare che serva per far si che il titolo corto appaia ANCHE nella testatina della pagina in cui la sezione ha inizio (che altrimenti avrebbe la testatina lunga)

      Grazie infinite

      Federico

      ps.. ma il mio nick che centra? :p

    • #28397
      Up
      0
      Down
      ::

      Davvero gentile.

      Aggiungo per i posteri che ho dovuto modificare leggermente la parte relativa a section come segue:

      `
      \let\biasibo@section\section
      \def\biasibo@@section[#1]#2{\biasibo@section[#2]{#2\sectionmark{#1}}\sectionmark{#1}}
      \def\section{\@ifnextchar*{\biasibo@section}{\@dblarg{\biasibo@@section}}}
      \makeatother
      `

      e cioè aggiungendo [#2] nel comando opzionale e un altro \sectionmark{#1} all’interno dell’argomento principale. Questo pare che serva per far si che il titolo corto appaia ANCHE nella testatina della pagina in cui la sezione ha inizio (che altrimenti avrebbe la testatina lunga)

      Direi che
      `\def\biasibo@@section[#1]#2{\biasibo@section[#2]{#2\sectionmark{#1}}}`
      dovrebbe bastare.

      ps.. ma il mio nick che centra? :p

      Per avere nomi di macro che non sovrascrivano altre macro esistenti.

      Ciao
      Enrico

    • #28398
      Up
      0
      Down
      ::


      si è più che sufficiente:

      il mio era più un “taccone” che una correzione 😀 come dicevo all’inizio non ci capisco ancora nulla del linguaggio “di basso livello”

      ciao
      federico

    • #28399
      Up
      0
      Down
      ::


      Sono costretto a correggere ulteriormente quanto detto fin qui:

      utilizzando:
      `
      \def\biasibo@@section[#1]#2{\biasibo@section[#2]{#2\sectionmark{#1}}}`
      si ottiene la testatina corta solo sulla pagina in cui compare il titolo.

      al contrario utilizzando:
      `
      \def\biasibo@@section[#1]#2{\biasibo@section{#2}\sectionmark{#1}} `
      si ottiene la testatina corta solo sulle pagine seguenti.

      Per avere entrambe funziona:
      `
      \def\biasibo@@section[#1]#2{\biasibo@section[#2]{#2\sectionmark{#1}}\sectionmark{#1}}`

      Federico

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

Go to top