Numerazione section alfanumerica

  • Creatore
    Topic
  • #25406
    Up
    0
    Down
    ::


    Ciao a tutti. Altro problemino 😕 Un po’ alla volta sto imparando tante cosette ma LaTex è davvero immenso, quindi scusate la banalità della mia richiesta.
    Il mio problemo riguarda la strutturazione del libro che sto sistemando. Ho saputo oggi che devo organizzarlo così: con i capitoli strutturati tipo A1.1 A1.2 ecc e poi A2.1 A2.2 ecc e poi anche S1.1 e S2.1 S2.2 ecc. (senza il punto tra A e 1.1)
    In sostanza devo agire sul comando \thechaper che forse mi viene più facile scrivere di volta in volta il valore che mi interessa (ad esempio A1), specificandolo nella dichiarazione del titolo del capitolo. No?
    Lavoro con la classe book e per formattare i titoli uso titlesec.
    Avevo già visto un pezzo di codice che suggeriva `\renewcommand\thechaper {\Alph{chapter}\arabic{section}} ` per ottenere la lettera però non fa molto al caso mio.. Usare \part come livello gerarchico superiore, per dare la lettera e poi numerare i capitoli con il numero arabo è una soluzione che vorrei evitare perchè il libro non va diviso in parti ma in capitoli “equivalenti” tra loro. Il fatto di dover avere A1, A2 è per la necessità di spezzare, a fini “logistici”, in parte capitoli con lo stesso titolo.Che dite? si può fare? Sono sicuro di si:roll:
    Grazie mille!

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #25407
      Up
      0
      Down
      ::

      Ciao a tutti. Altro problemino 😕 Un po’ alla volta sto imparando tante cosette ma LaTex è davvero immenso, quindi scusate la banalità della mia richiesta.
      Il mio problemo riguarda la strutturazione del libro che sto sistemando. Ho saputo oggi che devo organizzarlo così: con i capitoli strutturati tipo A1.1 A1.2 ecc e poi A2.1 A2.2 ecc e poi anche S1.1 e S2.1 S2.2 ecc. (senza il punto tra A e 1.1)
      In sostanza devo agire sul comando \thechaper che forse mi viene più facile scrivere di volta in volta il valore che mi interessa (ad esempio A1), specificandolo nella dichiarazione del titolo del capitolo. No?
      Lavoro con la classe book e per formattare i titoli uso titlesec.
      Avevo già visto un pezzo di codice che suggeriva `\renewcommand\thechaper {\Alph{chapter}\arabic{section}} ` per ottenere la lettera però non fa molto al caso mio.. Usare \part come livello gerarchico superiore, per dare la lettera e poi numerare i capitoli con il numero arabo è una soluzione che vorrei evitare perchè il libro non va diviso in parti ma in capitoli “equivalenti” tra loro. Il fatto di dover avere A1, A2 è per la necessità di spezzare, a fini “logistici”, in parte capitoli con lo stesso titolo.Che dite? si può fare? Sono sicuro di si:roll:

      Non è che si capisca molto. Qual è la successione dei numeri di capitolo? A1, A2, … B1, B2, … oppure A1, B1, …, A2, B2, …? Oppure “casuale”?

      È ovvio, in ogni caso, che mettere in \thechapter un riferimento al contatore section è del tutto sbagliato.

      Per avere i capitoli secondo il primo schema puoi fare così:
      `\usepackage{chngcntr}
      \newcounter{superchapter}
      \renewcommand{\thesuperchapter}{\Alph{superchapter}}
      \counterwithin{chapter}{superchapter}
      \renewcommand{\thechapter}{\thesuperchapter\arabic{chapter}}
      \newcommand{\chapterclass}{\refstepcounter{superchapter}}`
      Il comando \chapterclass va dato prima di \chapter quando vuoi che aumenti la lettera:
      `\chapterclass
      \chapter{X}

      \chapter{Y}

      \chapterclass
      \chapter{U}

      \chapter{V}
      …`
      produrrà i capitoli secondo la numerazione A1, A2, B1, B2.

      Se li vuoi nella seconda forma basta scambiare i ruoli dei contatori:
      `\usepackage{chngcntr}
      \newcounter{superchapter}
      \counterwithin{chapter}{superchapter}
      \renewcommand{\thechapter}{\Alph{chapter}\thesuperchapter}
      \newcommand{\chapterclass}{\refstepcounter{superchapter}}`
      Avrai bisogno di tocloft per compilare l’indice.

      Ciao
      Enrico

    • #25408
      Up
      0
      Down
      ::

      Non è che si capisca molto. Qual è la successione dei numeri di capitolo? A1, A2, … B1, B2, … oppure A1, B1, …, A2, B2, …? Oppure “casuale”?

      È ovvio, in ogni caso, che mettere in \thechapter un riferimento al contatore section è del tutto sbagliato.

      Per avere i capitoli secondo il primo schema puoi fare così:
      `\usepackage{chngcntr}
      \newcounter{superchapter}
      \renewcommand{\thesuperchapter}{\Alph{superchapter}}
      \counterwithin{chapter}{superchapter}
      \renewcommand{\thechapter}{\thesuperchapter\arabic{chapter}}
      \newcommand{\chapterclass}{\refstepcounter{superchapter}}`
      Il comando \chapterclass va dato prima di \chapter quando vuoi che aumenti la lettera:
      `\chapterclass
      \chapter{X}

      \chapter{Y}

      \chapterclass
      \chapter{U}

      \chapter{V}
      …`
      produrrà i capitoli secondo la numerazione A1, A2, B1, B2.

      Ciao
      Enrico

      Ciao Enrico. Si forse non mi ero spiegato granchè bene. Comunque grazie per il codice. Lavorandoci un po’ ho capito come funziona e che contatore contiene cosa.
      La struttura di cui ho bisogno io (putroppo) è un po’ complicata:S1, S2, S3, S4, S5, A1, A2, B1, B2, C1 e poi di nuovo S6, S7…
      Mi sono studiato il codice che mi hai suggerito, in particolare il comando ` \counterwithin ` (che nella distribuzione completa di MikTex 2.7 non è previsto ! 🙄 ) e ho capito il trucchetto :wink:.
      Però per le mie esigenze ho adattato il codice così:
      `
      \usepackage{chngcntr}
      \newcounter{AlfaChapter}
      \renewcommand{\theAlfaChapter}{\Alph{AlfaChapter}}
      \counterwithin{chapter}{AlfaChapter}
      \renewcommand{\thechapter}{\theAlfaChapter\arabic{chapter}}
      %\newcommand{\SetChapter}{\refstepcounter{AlfaChapter}}
      \newcommand{\SetChapter}[1]{\setcounter{AlfaChapter}{{#1}}}`
      Nel quale specifico con che lettera cominciare. Ad esempio, dovendo partire nel il primo capitolo con la S1 (Simposio), scrivo
      `\SetChapter{19} %19 = lettera S: S1
      \chapter{titolo}
      ….
      \chapter{titolo 2} %S2 ` Poi, uso lo stesso comando per inserire A1 e poi quando devo riprendere da S6 scrivo ` SetChapter{19} %19
      \setcounter{chaper}{6}
      \chapter{titolo} %S6`
      Lo so che si potrebbero creare delle variabili che tengono in memoria i valori e che settare il contatore chaper manualmente non è proprio il massimo.. Però così è come serve a me. Si accettano ovviamente suggerimenti e finezze per rendere il codice più funzionale ed elegante ! 🙂
      Ciao, e grazie mille!

    • #25409
      Up
      0
      Down
      ::

      Lo so che si potrebbero creare delle variabili che tengono in memoria i valori e che settare il contatore chaper manualmente non è proprio il massimo.. Però così è come serve a me. Si accettano ovviamente suggerimenti e finezze per rendere il codice più funzionale ed elegante ! 🙂

      Non occorre un contatore in più.
      `\makeatletter
      \renewcommand{\thechapter}{\@SetChapter\arabic{chapter}}
      \def\Chapter{%
      \expandafter\xdef\csname save@\@SetChapter\endcsname{\arabic{chapter}}%
      \chapter}
      \def\SetChapter#1{%
      \gdef\@SetChapter{#1}%
      \@ifundefined{save@#1}
      {\setcounter{chapter}{0}}
      {\setcounter{chapter}{\@nameuse{save@#1}}\stepcounter{chapter}}%
      }
      \makeatother`
      Ora puoi inserire il tuo codice come
      `\SetChapter{S}
      \Chapter{titolo}

      \Chapter{titolo}

      \SetChapter{A}
      \Chapter{titolo}

      \Chapter{titolo}

      \SetChapter{S}
      \Chapter{titolo}

      \Chapter{titolo}
      …`
      e avrai S1, S2, A1, A2, S3, S4. Occhio a \Chapter invece di \chapter; ho dovuto fare così perché i comandi \tableofcontents e altri si appoggiano a \chapter.

      Il comando \Chapter aggiorna il significato del comando \save@S (se siamo dopo una dichiarazione \SetChapter{S}) che conterrà il numero del capitolo che si sta per cominciare diminuito di uno (perché è \chapter che fa avanzare il contatore).

      Il comando \SetChapter{S} imposta il valore del contatore chapter a quello contenuto in \save@S, aumentato di uno. Tuttavia la prima volta che compare \SetChapter{S}, il comando \save@S non sarà definito e il contatore chapter è impostato a 0.

      Ciao
      Enrico

    • #25410
      Up
      0
      Down
      ::

      Non occorre un contatore in più.
      `\makeatletter
      \renewcommand{\thechapter}{\@SetChapter\arabic{chapter}}
      \def\Chapter{%
      \expandafter\xdef\csname save@\@SetChapter\endcsname{\arabic{chapter}}%
      \chapter}
      \def\SetChapter#1{%
      \gdef\@SetChapter{#1}%
      \@ifundefined{save@#1}
      {\setcounter{chapter}{0}}
      {\setcounter{chapter}{\@nameuse{save@#1}}\stepcounter{chapter}}%
      }
      \makeatother`
      Ora puoi inserire il tuo codice come
      `\SetChapter{S}
      \Chapter{titolo}

      \Chapter{titolo}

      \SetChapter{A}
      \Chapter{titolo}

      \Chapter{titolo}

      \SetChapter{S}
      \Chapter{titolo}

      \Chapter{titolo}
      …`

      Ciao
      Enrico

      Ciao Enrico.
      Sono costretto a riaprire questo thread perchè mi capitato per le mani un’altra brutta bestia: pacchetto hyperref.
      Come dici giustamente:

      Occhio a \Chapter invece di \chapter; ho dovuto fare così perché i comandi \tableofcontents e altri si appoggiano a \chapter.

      Il caro pacchetto Hyperref è uno di questi. Sono costretto a usarlo perchè devo inserire dei link a file pdf esterni. Ci sono pacchetti alternativi?
      Comunque il mio problema è che quando compilo mi genera una serie di warning del tipo “destination with the same identifier (name{chapter.1} has been already used, duplicate ignored”. Da quello che posso capire questi warning derivano dal fatto che LaTex trova più volte il capitolo 1, ad esempio. E ha ragione, visto che la struttura, è S1, S2 e poi A1 A2…. Quindi, a parte la “S” o la “A” di \@SetChapter, il valore contenuto in thechapter è più volte 1, generando confusione e rendendo hyperref inservibile, perchè i link puntano a parti sbagliate del documento. 😥
      Come si potrebbe aggirare l’ostacolo? E’ possibile usare un altro contatore al posto di chapter per avere gli S1, S2, S3.. non so se mi sono spiegato…
      Sarei disposto anche a lasciar perdere hyperref, o al limite a disattivare i link nel TOC. Mi servono però i link per i pdf esterni, che metto, proprio nel TOC, nella forma:
      S1.1 Titolo abstract di Tizio cazio [long version] . . . . . . 10
      Ciao e grazie mille per ogni eventuale suggerimento! 😆 😉

    • #25411
      Up
      0
      Down
      ::

      Il caro pacchetto Hyperref è uno di questi. Sono costretto a usarlo perchè devo inserire dei link a file pdf esterni. Ci sono pacchetti alternativi?

      Guarda con attenzione le innumerevoli opzioni di hyperref, è possibile che trovi quello che ti serve, cioè eliminare i riferimenti interni ai capitoli.

      Ciao
      Enrico

    • #25412
      Up
      0
      Down
      ::


      Ciao.
      Ho sfogliato il manuale html e l’unica opzione che mi serviva non c’è. Per fortuna dopo un rapito giro su google… `
      hypertex= false `
      Così però mi disattiva tutti i link, anche quelli ai file esterni, motivo per cui vorrei usare hyperref 😥 😥 😥
      E anche se ce ne fosse uno per disattivare i link del TOC, sarei comunque sempre li, perchè è nel TOC che mi servono i link ai file esterni…
      Non c’è qualche altra soluzione?
      Mi rendo conto che forse mettersi a lavorare con i contatori interni di LaTex, per far coesistere hyperref e la successione di capitoli bislacca che mi è stata imposta è davvero complicato se non impossibile. Esistono altri pacchetti per ottenere solo semplici link a file esterni, in pdf?
      Ciao e grazie! 😳

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

Go to top