RISOLTO – smallRoman e backref

  • Creatore
    Topic
  • #91196
    Up
    0
    Down
    ::


    Ciao e buon anno a tutti. La mia prima catena di problemi dell’anno è composta da tre questioni per le quali aprirò un argomento ciascuna.

    Cominciamo.

    Per chi lo sa o chi non lo sa, sto scrivendo la tesi con le classi coma, e stile ClassicThesis modificato da Lorenzo Pantieri (più qualche piccolo ritocco). In particolare uso la numerazione romana maiuscola ma piccola nella prima parte (frontmatter) grazie a una modifica di Enrico Gregorio.

    Il problema, molto semplice, è che volendo attivare backref per la bibliografia (opzione che permette di far comparire nelle voci stampate in bibliografia il riferimento alle pagine del testo nelle quali sono state citate) non funziona e da errore.

    Riporto l’esempio minimo del sorgente

    `% !TEX encoding = UTF-8 Unicode
    % !TEX TS-program = pdflatex

    \documentclass{scrbook}% classe Book KOMA-script
    \usepackage[T1]{fontenc}% Codifica caratteri di stampa (lettere accentate, ecc)
    \usepackage[utf8]{inputenc}% Codifica caratteri in ingresso (del file .tex)
    \usepackage[italian]{babel}% Sillabazione locale
    \usepackage{classicthesis}% stile ClassicThesis

    \makeatletter% numerazione romana maiuscola piccola (va in conflitto con mparhack)
    \renewcommand{\frontmatter}{%
    \cleardoublepage\@mainmatterfalse
    \pagenumbering{smallRoman}}
    \DeclareRobustCommand{\@smrc}[1]{%
    \begingroup\check@mathfonts\fontsize{\sf@size}{\sf@size}%
    \selectfont#1\endgroup}
    \def\smallRoman#1{\expandafter\@smallRoman\csname c@#1\endcsname}
    \def\@smallRoman#1{\@smrc{%
    \expandafter\@slowromansmallcap\romannumeral #1@}}
    \def\@slowromansmallcap#1{\ifx @#1% then terminate
    \else
    \if i#1I\else
    \if v#1V\else
    \if x#1X\else
    \if l#1L\else
    \if c#1C\else
    \if d#1D\else
    \if m#1M\else
    #1\fi\fi\fi\fi\fi\fi\fi
    \expandafter\@slowromansmallcap
    \fi}
    \pdfstringdefDisableCommands{\let\@smrc\@iden}
    \makeatother

    \usepackage{csquotes}% citazioni (necessario a biblatex)
    \usepackage[backref,% riferimenti in bibliografia alle pagine in citazione
    backend=biber,% motore
    ]{biblatex}% bibliografia
    \bibliography{bibliografia}% database bibliografico personale (da inserire nella cartella principale con il file .tex)

    \begin{document}
    \frontmatter
    \pagenumbering{smallRoman}% numarazione pagine frontmatter in romano maiuscolo piccolo
    Abbiamo sfruttato l'opera \cite{Pinco:prova}
    \printbibliography
    \end{document}`

    e qui il contenuto del mio file (che ovviamente non centra nulla col problema ma lo riporto comunque)

    `% !TEX encoding = UTF-8 Unicode

    @unpublished{Pinco:prova,
    Author = {Pinco, Pallino},
    Title = {Prova}}
    `

    Grazie mille a chiunque contribuirà alla soluzione di questo problemino.

    Ora vado a bere un caffè e poi vi scrivo gli altri due problemi legati a imakeidx 🙂

    Saalvé

    Corrado.

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

      Dork” post=90786Ciao e buon anno a tutti. La mia prima catena di problemi dell’anno è composta da tre questioni per le quali aprirò un argomento ciascuna.

      Cominciamo.

      Per chi lo sa o chi non lo sa, sto scrivendo la tesi con le classi coma, e stile ClassicThesis modificato da Lorenzo Pantieri (più qualche piccolo ritocco). In particolare uso la numerazione romana maiuscola ma piccola nella prima parte (frontmatter) grazie a una modifica di Enrico Gregorio.

      Il problema, molto semplice, è che volendo attivare backref per la bibliografia (opzione che permette di far comparire nelle voci stampate in bibliografia il riferimento alle pagine del testo nelle quali sono state citate) non funziona e da errore.

      Riporto l’esempio minimo del sorgente

      `% !TEX encoding = UTF-8 Unicode
      % !TEX TS-program = pdflatex

      \documentclass{scrbook}% classe Book KOMA-script
      \usepackage[T1]{fontenc}% Codifica caratteri di stampa (lettere accentate, ecc)
      \usepackage[utf8]{inputenc}% Codifica caratteri in ingresso (del file .tex)
      \usepackage[italian]{babel}% Sillabazione locale
      \usepackage{classicthesis}% stile ClassicThesis

      \makeatletter% numerazione romana maiuscola piccola (va in conflitto con mparhack)
      \renewcommand{\frontmatter}{%
      \cleardoublepage\@mainmatterfalse
      \pagenumbering{smallRoman}}
      \DeclareRobustCommand{\@smrc}[1]{%
      \begingroup\check@mathfonts\fontsize{\sf@size}{\sf@size}%
      \selectfont#1\endgroup}
      \def\smallRoman#1{\expandafter\@smallRoman\csname c@#1\endcsname}
      \def\@smallRoman#1{\@smrc{%
      \expandafter\@slowromansmallcap\romannumeral #1@}}
      \def\@slowromansmallcap#1{\ifx @#1% then terminate
      \else
      \if i#1I\else
      \if v#1V\else
      \if x#1X\else
      \if l#1L\else
      \if c#1C\else
      \if d#1D\else
      \if m#1M\else
      #1\fi\fi\fi\fi\fi\fi\fi
      \expandafter\@slowromansmallcap
      \fi}
      \pdfstringdefDisableCommands{\let\@smrc\@iden}
      \makeatother

      \usepackage{csquotes}% citazioni (necessario a biblatex)
      \usepackage[backref,% riferimenti in bibliografia alle pagine in citazione
      backend=biber,% motore
      ]{biblatex}% bibliografia
      \bibliography{bibliografia}% database bibliografico personale (da inserire nella cartella principale con il file .tex)

      \begin{document}
      \frontmatter
      \pagenumbering{smallRoman}% numarazione pagine frontmatter in romano maiuscolo piccolo
      Abbiamo sfruttato l'opera \cite{Pinco:prova}
      \printbibliography
      \end{document}`

      e qui il contenuto del mio file (che ovviamente non centra nulla col problema ma lo riporto comunque)

      `% !TEX encoding = UTF-8 Unicode

      @unpublished{Pinco:prova,
      Author = {Pinco, Pallino},
      Title = {Prova}}
      `

      Il problema è lo stesso che in Problema backref di biblatex e philosophy-modern

      Nell’esempio uso [tt]filecontents*[/tt] per la bibliografia. Usa il nome del tuo file in [tt]\addbibresource[/tt] (da preferire a [tt]\bibliography[/tt], attento a mettere anche l’estensione [tt].bib[/tt]):

      `
      \begin{filecontents*}{\jobname.bib}
      @unpublished{Pinco:prova,
      Author = {Pinco, Pallino},
      Title = {Prova}}
      \end{filecontents*}
      \documentclass{scrbook}% classe Book KOMA-script
      \usepackage[T1]{fontenc}% Codifica caratteri di stampa (lettere accentate, ecc)
      \usepackage[utf8]{inputenc}% Codifica caratteri in ingresso (del file .tex)
      \usepackage[italian]{babel}% Sillabazione locale
      \usepackage{classicthesis}% stile ClassicThesis

      \usepackage{csquotes}% citazioni (necessario a biblatex)
      \usepackage[
      backref,
      ]{biblatex}
      \addbibresource{\jobname.bib}

      \makeatletter% numerazione romana maiuscola piccola (va in conflitto con mparhack)
      \renewcommand{\frontmatter}{%
      \cleardoublepage\@mainmatterfalse
      \pagenumbering{smallRoman}}
      \DeclareRobustCommand{\@smrc}[1]{%
      \begingroup\check@mathfonts\fontsize{\sf@size}{\sf@size}%
      \selectfont#1\endgroup}
      \def\smallRoman#1{\expandafter\@smallRoman\csname c@#1\endcsname}
      \def\@smallRoman#1{\@smrc{%
      \expandafter\@slowromansmallcap\romannumeral #1@}}
      \def\@slowromansmallcap#1{\ifx @#1% then terminate
      \else
      \if i#1I\else
      \if v#1V\else
      \if x#1X\else
      \if l#1L\else
      \if c#1C\else
      \if d#1D\else
      \if m#1M\else
      #1\fi\fi\fi\fi\fi\fi\fi
      \expandafter\@slowromansmallcap
      \fi}
      \pdfstringdefDisableCommands{\let\@smrc\@iden}
      \let\original@abx@aux@backref\abx@aux@backref
      \def\abx@aux@backref#1#2#3#4#5{%
      \begingroup\let\@smrc\@firstofone
      \edef\x{\endgroup
      \noexpand\original@abx@aux@backref{#1}{#2}{#3}{#4}{#5}}\x}
      \makeatother

      \begin{document}
      \frontmatter
      \pagenumbering{smallRoman}% numarazione pagine frontmatter in romano maiuscolo piccolo
      Abbiamo sfruttato l'opera \cite{Pinco:prova}
      \printbibliography
      \end{document}
      `
      Nella “back reference” avrai il numero romano maiuscolo, però. Su quello non so che farci. Il rimedio più semplice è non usare affatto numeri romani.

      Ciao
      Enrico

    • #91198
      Up
      0
      Down
      ::


      Il codice che mi hai dato (oltre alle modifiche alle chiamate) differiva nell’aggiunta alla definizione dei numeri romani minuscoli queste righe in fondo (prima di makeatother)

      `\let\original@abx@aux@backref\abx@aux@backref
      \def\abx@aux@backref#1#2#3#4#5{%
      \begingroup\let\@smrc\@firstofone
      \edef\x{\endgroup
      \noexpand\original@abx@aux@backref{#1}{#2}{#3}{#4}{#5}}\show\x\x}`

      Continuava a dare errore. Sono andato a vedere nella discussione a cui ti riferivi e ho notato che il codice che aggiungevi non presentava lo \show\x finale, l’ho tolto, aggiungendo quindi solo il seguente codice

      `\let\original@abx@aux@backref\abx@aux@backref
      \def\abx@aux@backref#1#2#3#4#5{%
      \begingroup\let\@smrc\@firstofone
      \edef\x{\endgroup
      \noexpand\original@abx@aux@backref{#1}{#2}{#3}{#4}{#5}}\x}`

      E tutto funziona. È stata solo una svista o aveva un qualche senso ed è importante il fatto che mi desse errore?

      Grazie mille comunque, segnalo come risolto!

    • #91199
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Dork, il comamdo \show seguito da una control sequence, serve per mostrare sulla console il significato della control sequence, cioè la sua definizione o il carattere implicito che rappresenta.
        Chiaramente quando arriva il suo momento per andare in esecuzione , il programma di ferma per dare tempo all’utente di leggere ciò che voleva vedere. Non è un errore, ma serve appunto per mostrare il significato di una macro, e per controllare che sia proprio quello che si voleva che fosse. Una volta visto che è tutto a posto, lo si toglie insieme alla control sequence che il comando mostra, e la verifica è finita.

        Hai fatto bene a toglierlo, ma faresti ancora meglio se, quando il programma si ferma, leggessi quello che c;è scritto nella console, anche quando ci sono degli erorori veri; è così che si può interagire con il programma e capire se si tratta davvero di errori o di che cosa.

        Io consiglierei di configurare i vari shell editor che vengono usati di far eseguire i programmai del sistema TeX in “errorstopmode” piuttosto che in scrollmode. Con quest’ultimo si dice al programma di tirate dritto, senza preoccuparsi dei messaggi, cercando di arrivare comunque alla fine, cosa che spesso mette in imbarazzo l’utente, perché talvolta non viene prodotta nessuna uscita; in ogni caso lil modo “scroll” impedisce all’utente di interagire con il programma per inserire le correzioni al volo sia nel file sorgente, sia nel flusso di dati che il programma sta leggendo. Nelle varie guide c’è scritto che fra le varie azioni che si possono fare quando l programma si ferma (H, X, S,…} c’è anche I; questa si uò usare solo se il programma si ferma e da tempo all’operatore di inserire/sostituire qualcosa nel flusso di dati che il programma sta leggendo. Secondo me utilissimo, ma non lo si può usare se non quando si è in errorstopmode, e si ha l’abitudine di leggere i messaggi.

      • #91200
        Up
        0
        Down
        ::

        Dork” post=90797Il codice che mi hai dato (oltre alle modifiche alle chiamate) differiva nell’aggiunta alla definizione dei numeri romani minuscoli queste righe in fondo (prima di makeatother)

        `\let\original@abx@aux@backref\abx@aux@backref
        \def\abx@aux@backref#1#2#3#4#5{%
        \begingroup\let\@smrc\@firstofone
        \edef\x{\endgroup
        \noexpand\original@abx@aux@backref{#1}{#2}{#3}{#4}{#5}}\show\x\x}`

        Continuava a dare errore. Sono andato a vedere nella discussione a cui ti riferivi e ho notato che il codice che aggiungevi non presentava lo \show\x finale, l’ho tolto, aggiungendo quindi solo il seguente codice

        `\let\original@abx@aux@backref\abx@aux@backref
        \def\abx@aux@backref#1#2#3#4#5{%
        \begingroup\let\@smrc\@firstofone
        \edef\x{\endgroup
        \noexpand\original@abx@aux@backref{#1}{#2}{#3}{#4}{#5}}\x}`

        E tutto funziona. È stata solo una svista o aveva un qualche senso ed è importante il fatto che mi desse errore?

        Grazie mille comunque, segnalo come risolto!

        Scusa, mi sono dimenticato di togliere [tt]\show\x[/tt] che usavo per controllare che tutto fosse a posto. Modifico il codice nella risposta.

        Ciao
        Enrico

      • #91201
        Up
        0
        Down
        ::

        OldClaudio” post=90798Dork, il comamdo \show seguito da una control sequence, serve per mostrare sulla console il significato della control sequence, cioè la sua definizione o il carattere implicito che rappresenta.
        Chiaramente quando arriva il suo momento per andare in esecuzione , il programma di ferma per dare tempo all’utente di leggere ciò che voleva vedere. Non è un errore, ma serve appunto per mostrare il significato di una macro, e per controllare che sia proprio quello che si voleva che fosse. Una volta visto che è tutto a posto, lo si toglie insieme alla control sequence che il comando mostra, e la verifica è finita.

        Hai fatto bene a toglierlo, ma faresti ancora meglio se, quando il programma si ferma, leggessi quello che c;è scritto nella console, anche quando ci sono degli erorori veri; è così che si può interagire con il programma e capire se si tratta davvero di errori o di che cosa.

        Io consiglierei di configurare i vari shell editor che vengono usati di far eseguire i programmai del sistema TeX in “errorstopmode” piuttosto che in scrollmode. Con quest’ultimo si dice al programma di tirate dritto, senza preoccuparsi dei messaggi, cercando di arrivare comunque alla fine, cosa che spesso mette in imbarazzo l’utente, perché talvolta non viene prodotta nessuna uscita; in ogni caso lil modo “scroll” impedisce all’utente di interagire con il programma per inserire le correzioni al volo sia nel file sorgente, sia nel flusso di dati che il programma sta leggendo. Nelle varie guide c’è scritto che fra le varie azioni che si possono fare quando l programma si ferma (H, X, S,…} c’è anche I; questa si uò usare solo se il programma si ferma e da tempo all’operatore di inserire/sostituire qualcosa nel flusso di dati che il programma sta leggendo. Secondo me utilissimo, ma non lo si può usare se non quando si è in errorstopmode, e si ha l’abitudine di leggere i messaggi.

        Credimi che solitamente leggo sempre i messaggi di errore e vado a correggerli nel sorgente (se ti ricordi mi ero anche premurato poco tempo fa di capire perché non mi funzionava il goto error), fosse per me io userei un stoptowarning se esistesse, cose che cerco sempre di andare a cercare ed eliminare, piacendomi le compilazioni pulite (e al momento di warning ne ho solo due terne dovute hyperref e a dei simboli matematici in due titoli: mathmode+simbolo+mathmode, ma visto che sia il titolo che l’indice mostra tutto correttamente ho deciso, per ora, di lasciarli warning :-)).

        In questo caso il messaggio era `(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/lbx/italian.lbx)
        (./TesiMagi.aux
        > \x=macro:
        ->\endgroup \original@abx@aux@backref {1}{Kechris:classical}{0}{IX}{9}.
        \abx@aux@backref …{#1}{#2}{#3}{#4}{#5}}\show \x
        \x
        l.50 …{1}{Kechris:classical}{0}{\@smrc {IX}}{9}`

        molto simile al messaggio di errore che mi si presentava e mi sono fatto prendere dalla fretta credendo fosse un errore e sono andato a cercare nel codice incongruenze, certo che il codice di Enrico non potesse essere sbagliato…ho trovato quello originale scritto da lui nella discussione aperta da Lorenzo (che mi aveva citato) e l’ho scorso tutto (ammetto, senza cercare di capire cosa facesse…) e ho trovato un’incongruenza..l’ho ripristinato e tutto funzionava…attivando in me il rafforzo emotivo che mi ha portato a convincermi ancora di più si trattasse di un errore :-).

        Riguardo all’inserimento da console, credimi che, sinceramente, non ho ancora capito come far funzionare è ovvio come funzione, pure, già mi pare di aver capito che non aggiunge più informazioni alla compilazione e produce il pdf così come è stato costruito fino a quel momento (giusto?…quando potrebbe essere utile?), ma non sono ancora riuscito a farlo funzionare…solitamente al blocco, leggo, vado nel sorgente, modifico, e poi mela+alt+t mi cancella tutti i file ausiliari e ricompila 🙂 [ah, ricordo che uso TeXShop].

        In ogni modo grazie per la lezione che mi è stata sicuramente utile per convincermi ancora di più a leggere non distrattamente i messaggi d’amore che il caro LaTeX ci manda :-).

        Buon fine settimana e grazie ancora.

        ciao ciao,

        Corrado.

      • #91202
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Corrado, se avessi letto il messaggio dal fondo verso l’alto, avresi visto ce la cosa si manifestava alla riga 50 di qualche file; dirante l’esecuzione di una macro.
          alla riga sopra hai la famosa riga spezzata; la riga viene spezzara nel punto in cui è avvenuto l’arresto, e nella parte di sotto c’è il prossimo token da elaborare cioè \x, ma subito prima dell’interruzione c’è \show\x; chissà cosa cosa vorrà dire?
          Passi alle righe precedenti e trovi che \x è una macro e che il suo significato è [tt]\endgroup \original@abx@aux@backref {1}{Kechris:classical}{0}{IX}{9}.[/tt]
          Nota il punto finale che non fa parte della definizione, ma rappresenta al fine del messaggio.

          Come vedi è chiarissimo; se poi vai in basso dolo la riga che comincia con l..50, nella console troveresti che puoi premere o qualuque degli altri tasti azione, compreso I. Io tavolta se \show mi dicesse che il significato della macro \x è [tt]\protected\x .[/tt] (nota lo spazio subito prima del punto di fine messaggio) avrei avuto poca informazione, Allora sfodererei una di quelle magie alla TeX e iscriveri nella riga in basso `
          I\expandafter\show\csname x \endcsname` (noti gli spazi?) e avrei il significato della macro vera, non quella protetta, in modo che saprei esattamante cosa fa sia la macro vera sia evidentemente quella protetta quando viene eseguitaa per davvero.

          I mi dice di inserire nel flusso dei token all’entata qunto c’è scritto dopo sulla stessa riga della console.
          \exmandafter mi dice di eseguire \show DOPO aver eseguito il token successivo
          \csname “nome control sequence”\endcsname serve per fare riferimento ad un nome di una control sequence costruito con tutti i token anche non letterali che sono compresi dopo \csname e prima di \endcsname (senza contare gli spazi che seguono il comando \csname che non contano mai dopo il nome di un comando)

          Ovviamente l’azione I finisce premendo , questo va da sé, altrimenti come sarebbe terminata la descrizione dell’azione.

          I è utile, specialmente con TeXShop che lavora in errorstopmode anche quando scrivi male il nome di un comando; a me capita di scrivere \amta invece di \meta; bene il compilatore si ferma con un messaggio d’errore spezzando la riga dopo \mata e indicandomi il numero della riga dove ha trovato il comando errato; allora premo mela+L e mi si apre la finestrella il numero della riga; lo scrivo e premo ; correggo \mata in \meta nel file sorgente e NON premo mela+alt+T, ma scrivo nella riga della console [tt]I\meta[/tt] e premo ; la compilazione prosegue con lo stesso file sorgente (anche se alla prossima il file sorgente non conterrà più l’errore) ma avendo sostituito \meta a \mata; se non ci sono altri errori la compilazione arriva alla fine senza ulteriori problemi; se ci sono altri errori non gestibili con la I, allora premo X al primo errore che non posso correggere interattivamente come per \mata, e senza perdere niente in termini di file ausiliari che mi potranno essere utili per le prossime compilazioni. Trovo questo modo di procedere molto efficace. Come noto non cancello mai i file ausiliari; sono troppo utili per cancellarli; per ricrearli in modo corretto di solito ci vogliono da due a tre compilazioni del documento, quindi si spreca un mucchio di tempo.

          Un mucchio? be’ sì; è vero che pdflatex è velocissimo; xelatex non lo è altrettanto e lualatex è ancora più lento; tre compilazioni possono far perdere anche un paio di minuti se si sta lavorando un documento non minimale.

        • #91203
          Up
          0
          Down
          ::


          mela+L non lo conoscevo e per un amante come me del “controllo totale da tastiera” sarà davvero utile 🙂 Grazie. …anche per la chiara spiegazione sull’uso di .
          Direi che mi è chiaro anche l’uso di …eviterei anche io di buttare i file ausiliari ma spesso mi capita che si rovinino (probabilmente proprio perché eseguo un brutale “abort” o un forse peggiore :-)).

          Sperimenterò e leggerò di più 🙂

          Grazie ancora.

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

      Go to top