Numerare i capoversi con il pacchetto “parano”

  • Creatore
    Topic
  • #65528
    Up
    0
    Down
    ::


    Questo topic nasce da una mia particolare esigenza.
    In un documento ho già inserito un centinaio di ambienti (intervista) all’interno dei quali sono contenuti dei capoversi, separati da riga bianca. L’ambiente intervista è stato definito come una lista, in pratica equivale a quote, ma questo non è importante.
    Ora vorrei che all’nterno di quegli ambienti i capoversi venissero automaticamente numerati.

    In rete ho trovato il pacchetto parano che consente ciò. Non è disponibile su TeX Live, ma si può scaricare da qui.
    Dopo aver salvato il file nella propria cartella, cambiando il nome in “parano”, si consideri il seguente esempio:

    `\documentclass{book}

    \usepackage{parano,xspace}

    \def\postpara{\quad}
    \renewcommand\theparano{(\arabic{parano})}

    \newenvironment{intervista}{%
    \nobreak\vskip1ex
    \begingroup
    \parano\noindent\ignorespaces}
    {\endgroup\nobreak\vskip1ex}

    \begin{document}

    Qui inizia l'intervista, che riporta passi diversi su capoversidiversi:
    \begin{intervista}
    primo passo

    secondo passo

    terzo passo
    \end{intervista}
    E qui continua il discorso…

    Ora abbiamo un'altra serie di interviste:
    \begin{intervista}
    primo passo

    secondo passo

    terzo passo
    \end{intervista}

    \end{document}`

    Come si vede ogni capoverso all’interno dell’ambiente intervista viene numerato. Fin qui tutto bene, ma avrei lo stesso alcune domande.
    1) L’ambiente che ho definito è scritto bene? Si può fare di meglio?
    2) L’uso del pacchetto è sicuro? In alternativa si può scrivere un codice migliore?
    3) È possibile fare in modo che venga ignorata la prima riga bianca dopo \begin{intervista}:
    `\begin{intervista}

    primo passo

    secondo passo

    terzo passo
    \end{intervista}`
    Perché altrimenti quella riga viene considerata un capoverso, e quindi numerata. Quest’ultimo punto non è essenziale, visto che è semplice eliminare quelle righe bianche dal documento, con dei “cerca e sostituisci”, ma sarebbe comodo. E poi è interessante sul piano teorico.

    Ciao
    Ivan

Visualizzazione 13 filoni di risposte
  • Autore
    Risposte
    • #65529
      Up
      0
      Down
      ::


      Non so se fidarmi del pacchetto, visto che modifica comandi piuttosto importanti. Questo mi pare faccia al caso tuo.
      `\newcounter{parano}
      \newcommand{\doparano}{\stepcounter{parano}\textbf{\theparano}\quad}
      \newenvironment{intervista}
      {\setcounter{parano}{0}\parindent=0pt\vskip1ex
      \everypar\expandafter{\the\everypar\doparano}}
      {\vskip1ex}`

      Ciao
      Enrico

    • #65530
      Up
      0
      Down
      ::


      Benissimo.
      Ho modificato il codice togliendo `\setcounter{parano}{0} ` perché vorrei che la numerazione fosse progressiva.
      Così va benissimo, intendiamoci. Ma poniamo che volessi il numero nel margine, come se ogni passo del’intervista fosse una equazione.
      Con questo:
      `\newenvironment{intervista}
      {\parindent=0pt\vskip1ex
      \everypar\expandafter{\the\everypar\marginpar[\raggedleft\doparano]{\doparano}}}
      {\vskip1ex}`
      ottengo i riferimenti nei margini estern, ben allineatii. Come fare per averli sempre a destra?

      Ciao
      Ivan

    • #65531
      Up
      0
      Down
      ::

      ivan” post=64619Benissimo.
      Ho modificato il codice togliendo `\setcounter{parano}{0} ` perché vorrei che la numerazione fosse progressiva.
      Così va benissimo, intendiamoci. Ma poniamo che volessi il numero nel margine, come se ogni passo del’intervista fosse una equazione.
      Con questo:
      `\newenvironment{intervista}
      {\parindent=0pt\vskip1ex
      \everypar\expandafter{\the\everypar\marginpar[\raggedleft\doparano]{\doparano}}}
      {\vskip1ex}`
      ottengo i riferimenti nei margini estern, ben allineatii. Come fare per averli sempre a destra?

      `\newcounter{parano}
      \newcommand{\doparano}{\stepcounter{parano}%
      \rlap{\hskip\linewidth\hskip\marginparsep\textbf{\theparano}}}
      \newenvironment{intervista}
      {\setcounter{parano}{0}\parindent=0pt\vskip1ex
      \everypar\expandafter{\the\everypar\doparano}%
      }
      {\vskip1ex}`
      Ciao
      Enrico

    • #65532
      Up
      0
      Down
      ::


      \rlap ? Grandioso!
      E pensare che sono diventato matto a modificare \marginpar per farlo funzionare come volevo.
      Allora vediamo se ho capito. \rlap crea un box (di larghezza zero) e stampa il suo argomento fuori dal box, ma senza occupare spazio. In pratica sovrascrive a ciò che viene dopo.
      Siccome il nostro box contiene uno spazio orrizzontale di \linewidth+\marginparsep il suo aromento viene stampato alla fine della riga (separato da \marginparsep), ovvero sempre a destra.

      Alla fine ho modificato così:
      `\newcounter{parano}
      \newcommand{\doparano}{\refstepcounter{parano}%
      \rlap{\hskip\linewidth\hskip\marginparsep\upshape{\footnotesize(\theparano)}}}
      \newenvironment{intervista}
      {\parindent=0pt
      \parskip=.6ex
      \vskip.5ex
      \everypar\expandafter{\the\everypar\doparano}%
      \itshape}
      {\vskip1.1ex}
      `
      Ho usato \refstepcounter, perché forse mi serviranno i riferimenti. Non so se è una buona cosa, visto che le interviste sono circa 400 😯
      All’interno dell’ambiente i singoli capoversi sono separati da 0.6ex mentre prima e dopo l’ambiente c’è uno spazio di 1.1 ex. Sono delle prove m non mi sembra male.

      Ciao e grazie
      Ivan

    • #65533
      Up
      0
      Down
      ::

      ivan” post=64624Ho usato \refstepcounter, perché forse mi serviranno i riferimenti. Non so se è una buona cosa, visto che le interviste sono circa 400 😯

      Di per sé \refstepcounter non fa tanto più di \stepcounter: semplicemente ridefinisce \@currentlabel che verrà usata da un \label seguente. Sono tante \label che possono riempire la memoria (ma davvero tante).

      Ciao
      Enrico

    • #65534
      Up
      0
      Down
      ::

      egreg9″ post=64625

      Ho usato \refstepcounter, perché forse mi serviranno i riferimenti. Non so se è una buona cosa, visto che le interviste sono circa 400 😯

      Di per sé \refstepcounter non fa tanto più di \stepcounter: semplicemente ridefinisce \@currentlabel che verrà usata da un \label seguente. Sono tante \label che possono riempire la memoria (ma davvero tante).

      Ciao
      Enrico

      Qualcosa come

      ` \newcommand{\intlabel}[1]{%
      \addtocounter{parano}{-1}\refstepcounter{parano}\label{#1}}`

      da usare così:`
      \begin{document}

      Si veda il primo passo \ref{primo} e il secondo \ref{secondo}

      \begin{intervista}

      primo passo\intlabel{primo}

      secondo passo\intlabel{secondo}

      terzo passo senza etichetta

      \end{intervista}

      \end{document}
      `
      fa risparmiare memoria?

      Teoricamente questo codice dovrebbe permettere di definire un contatore “linkabile” solo quando serve e non per ogni capoverso.
      Però mi sembra un po’ contorto diminuire il contatore per poi aumentarlo rendendolo accessibile a \label

      Ciao
      Ivan

    • #65535
      Up
      0
      Down
      ::

      ivan” post=64634

      [quote=”ivan” post=64624]Ho usato \refstepcounter, perché forse mi serviranno i riferimenti. Non so se è una buona cosa, visto che le interviste sono circa 400 😯

      Di per sé \refstepcounter non fa tanto più di \stepcounter: semplicemente ridefinisce \@currentlabel che verrà usata da un \label seguente. Sono tante \label che possono riempire la memoria (ma davvero tante).

      Ciao
      Enrico

      Qualcosa come

      ` \newcommand{\intlabel}[1]{%
      \addtocounter{parano}{-1}\refstepcounter{parano}\label{#1}}`

      da usare così:`
      \begin{document}

      Si veda il primo passo \ref{primo} e il secondo \ref{secondo}

      \begin{intervista}

      primo passo\intlabel{primo}

      secondo passo\intlabel{secondo}

      terzo passo senza etichetta

      \end{intervista}

      \end{document}
      `
      fa risparmiare memoria?

      Teoricamente questo codice dovrebbe permettere di definire un contatore “linkabile” solo quando serve e non per ogni capoverso.
      Però mi sembra un po’ contorto diminuire il contatore per poi aumentarlo rendendolo accessibile a \label

      Ciao
      Ivan[/quote]
      Perché tutto questo?

      Ciao
      Enrico

    • #65536
      Up
      0
      Down
      ::

      egreg9″ post=64638
      Perché tutto questo?

      La situazione è la seguente. Ho un testo pieno di interviste, con relativo commento. I vari passi delle interviste vengono analizzati secondo percorsi tematici. Quindi accade che lo stesso passo venga ripreso in più sezioni. Per evitare questo si possono usare i riferimenti incrociati. Certo che potrei anche riferirmi direttamente ai passi già riportati. Ma ci sarebbe sempre il rischio di sbagliare, se togliessi un pezzo e non aggiornassi i riferimenti.
      Così ho pensato di definire un comando \label personalizzato che trasformasse solo quel contatore in contatore linkabile.
      Ma in realtà non so se ho fatto questo 🙄 E poi mi sembra una strada contorta e come spesso accade in questi casi, c’è una soluzione più semplice o più elegante.

      Ciao
      Ivan

    • #65537
      Up
      0
      Down
      ::

      ivan” post=64644

      Perché tutto questo?

      La situazione è la seguente. Ho un testo pieno di interviste, con relativo commento. I vari passi delle interviste vengono analizzati secondo percorsi tematici. Quindi accade che lo stesso passo venga ripreso in più sezioni. Per evitare questo si possono usare i riferimenti incrociati. Certo che potrei anche riferirmi direttamente ai passi già riportati. Ma ci sarebbe sempre il rischio di sbagliare, se togliessi un pezzo e non aggiornassi i riferimenti.
      Così ho pensato di definire un comando \label personalizzato che trasformasse solo quel contatore in contatore linkabile.
      Ma in realtà non so se ho fatto questo 🙄 E poi mi sembra una strada contorta e come spesso accade in questi casi, c’è una soluzione più semplice o più elegante.

      Ma il normale \label che cos’ha di male?

      Ciao
      Enrico

    • #65538
      Up
      0
      Down
      ::

      egreg9″ post=64648

      [quote=”egreg9″ post=64638]
      Perché tutto questo?

      La situazione è la seguente. Ho un testo pieno di interviste, con relativo commento. I vari passi delle interviste vengono analizzati secondo percorsi tematici. Quindi accade che lo stesso passo venga ripreso in più sezioni. Per evitare questo si possono usare i riferimenti incrociati. Certo che potrei anche riferirmi direttamente ai passi già riportati. Ma ci sarebbe sempre il rischio di sbagliare, se togliessi un pezzo e non aggiornassi i riferimenti.
      Così ho pensato di definire un comando \label personalizzato che trasformasse solo quel contatore in contatore linkabile.
      Ma in realtà non so se ho fatto questo 🙄 E poi mi sembra una strada contorta e come spesso accade in questi casi, c’è una soluzione più semplice o più elegante.

      Ma il normale \label che cos’ha di male?

      Ciao
      Enrico[/quote]

      Niente, naturalmente. Ho un po’ di confusione in testa. Pensavo che il problema fosse dato da \refstepcounte, mentre è dato da \label. Adesso ho capito 🙂

      Ciao
      Ivan

    • #65539
      Up
      0
      Down
      ::

      ivan” post=64651Ho un po’ di confusione in testa. Pensavo che il problema fosse dato da \refstepcounte, mentre è dato da \label. Adesso ho capito 🙂

      Rivediamo: \stepcounter{pippo} fa avanzare di uno il contatore pippo; \refstepcounter{pippo} fa lo stesso e inoltre definisce \@currentlabel in modo che si espanda alla rappresentazione associata al contatore pippo (cioè al valore espanso di \thepippo). Nient’altro. È \label{xyz} dato dopo \refstepcounter{pippo} (e prima di un altro \refstepcounter) che definisce l’associazione al valore di \thepippo dell’etichetta. Sarà poi \ref{xyz} a creare il collegamento ipertestuale.

      In effetti, con hyperref c’è anche la creazione dell’ancora quando viene dato \refstepcounter, ma non mi pare il caso di stare a guardare il byte.

      Ciao
      Enrico

    • #65540
      Up
      0
      Down
      ::


      Problema misterioso. Prova a compilare questo codice commentando e decommentando le righe commentate.
      Con \section la numerazione viene sbagliata. Ma se metto del testo tra il primo ambiente e il secondo, nel secondo la numerazione ritorna corretta.

      `\documentclass{article}

      \newcounter{parano}
      \newcommand{\doparano}{\refstepcounter{parano}%
      \rlap{\hskip\linewidth\hskip\marginparsep{\theparano}}}
      \newenvironment{intervista}
      {\parindent=0pt
      \vskip1ex
      \everypar\expandafter{\the\everypar\doparano}%
      \small\itshape}
      {\vskip1ex}

      \begin{document}
      %\section{a}
      \begin{intervista}
      uno

      due

      tre
      \end{intervista}

      %lorem ipsum

      \begin{intervista}
      uno

      due

      tre
      \end{intervista}

      \end{document}`

      Ciao
      Ivan

      p.s. vista l’ora tutto ciò potrebbe essere frutto di allucinazioni 😯

    • #65541
      Up
      0
      Down
      ::

      ivan” post=64668Problema misterioso. Prova a compilare questo codice commentando e decommentando le righe commentate.
      Con \section la numerazione viene sbagliata. Ma se metto del testo tra il primo ambiente e il secondo, nel secondo la numerazione ritorna corretta.

      `\documentclass{article}

      \newcounter{parano}
      \newcommand{\doparano}{\refstepcounter{parano}%
      \rlap{\hskip\linewidth\hskip\marginparsep{\theparano}}}
      \newenvironment{intervista}
      {\parindent=0pt
      \vskip1ex
      \everypar\expandafter{\the\everypar\doparano}%
      \small\itshape}
      {\vskip1ex}

      \begin{document}
      %\section{a}
      \begin{intervista}
      uno

      due

      tre
      \end{intervista}

      %lorem ipsum

      \begin{intervista}
      uno

      due

      tre
      \end{intervista}

      \end{document}`

      Ciao
      Ivan

      p.s. vista l’ora tutto ciò potrebbe essere frutto di allucinazioni 😯

      No, non è frutto di allucinazioni. Togli \the\everypar, cioè scrivi solo \everypar{\doparano}.

      Però non funziona correttamente se l’ambiente viene subito dopo un titolo di sezione, per via del meccanismo di protezione dai cambi pagina. Se proprio ti serve così, aggiungi
      `\csname @nobreakfalse\endcsname`
      dopo \vskip1ex alla chiusura.

      Ciao
      Enrico

    • #65542
      Up
      0
      Down
      ::

      egreg9″ post=64684
      Togli \the\everypar, cioè scrivi solo \everypar{\doparano}.

      Fatto. Funziona sia con
      ` \everypar\expandafter{\doparano}`
      che con
      ` \everypar{\doparano}`
      Leggo e rileggo i tuoi appunti, ma credo che bisogna prima o poi nella vita riconoscersi dei limiti :(. Da quello che ho capito,
      nel primo caso \expandafter è ininfluente, mentre col codice di prima serviva perché c’era \the\everypar subito dopo. Infatti togliendolo si ottiene:

      TeX capacity exceeded, sorry

      [/quote]
      Però non funziona correttamente se l’ambiente viene subito dopo un titolo di sezione, per via del meccanismo di protezione dai cambi pagina. Se proprio ti serve così, aggiungi
      `\csname @nobreakfalse\endcsname`
      dopo \vskip1ex alla chiusura.
      [/quote]
      Questo non serve, direi. Una sezione inizia sempre con un po’ di discorso e poi viene riportata l’intervista. Ma buono a sapersi.

      Ciao e grazie ancora!
      Ivan

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

Go to top