Addcontentsline e bookmark

  • Creatore
    Topic
  • #68647
    franen
    Partecipante
      Up
      0
      Down
      ::


      Ciao, domanda forse assurda:
      posso usare \addcontentsline avendo caricato hyperref e non generare alcun bookmark?
      È perché uso un pacchetto che genera da solo (tramite hyperref) i bookmark di alcune voci, e io vorrei anche inserire queste voci in una tableofcontents. Se uso \addcontentsline ottengo così bookmark doppi.

      Fran

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #68648
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Sicuramante no stai dando informazioni sufficienti: che pacchetto stai usando?

        • #68649
          franen
          Partecipante
            Up
            0
            Down
            ::


            Non era per custodire informazioni, solo che confidavo in una soluzione generale. Il pacchetto è songs, serve per scrivere canzoni con accordi (http://songs.sourceforge.net/, se lo avete nella TeXlive è probabilmente vecchio, l’ultima versione è la 2.13).
            Un esempio minimo compilabile è questo:
            `% !TEX encoding = UTF-8 Unicode
            \documentclass[10pt]{book}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage[italian]{babel}

            \usepackage[noindexes]{songs} % carico SONGS
            \MultiwordChords % accordi sopra più sillabe

            %\renewcommand\makeprelude{%
            %\resettitles%
            %\addcontentsline{toc}{section}{\songtitle}
            %\Large\bfseries\sffamily\songtitle
            %\nexttitle%
            %\foreachtitle{(\songtitle)\par}}

            \newcommand{\canzone}{%
            \beginchorus

            \[G]Can\[Am/G]tiamo \[G]can\[F/G]tiamo

            \[C]cantia\[Em]mo \[Am]Cantia\[D]mo. \[G]

            \endchorus
            \endsong}

            \usepackage{hyperref}

            \begin{document}
            \begin{songs}{}
            \songcolumns{2}
            \beginsong{canto1}[by={auth1}]
            \canzone
            \sclearpage
            \beginsong{canto2}[by={auth2}]
            \canzone
            \sclearpage
            \beginsong{canto3}[by={auth3}]
            \canzone
            \sclearpage
            \beginsong{canto4}[by={auth4}]
            \canzone
            \end{songs}
            \tableofcontents
            \end{document}`
            Il codice del pacchetto è, per me, molto complesso. I bookmark in questione sono quelli dei titoli delle canzoni. Il codice che li genera sta nella definizione del comando \SB@endsong.
            Se commento le righe in questione:`\ifpdfindex\begingroup%
            \ifx\pdfbookmark\undefined\else%
            \ifx\pdfbookmark\relax\else%
            \resettitles%
            \pdfbookmark[\ifnum\c@section=\z@1\else2\fi]%
            {\thesongnum. \songtitle}%
            {song\theSB@songsnum-\thesongnum}%
            \fi\fi%
            \endgroup\fi%`
            i bookmark non vengono generati e non ottengo errori.
            Se poi decommento le 6 righe del mio e.m.c. ottengo una tableofcontents corretta e dei bookmark sbagliati, che rimandano tutti alla prima canzone. Si potrebbe aggiustare questa soluzione, ma in realtà volevo evitare di modificare eccessivamente il codice del pacchetto.

            Fran

          • #68650
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              La maniera in cui hypefref genera i book mark è molto complesso e ha bisogno di un contatore a cui si possa re riferimento per gesire i book mark.

              Ora penso, senza avere ssaminato il codice che se cancelli quelle sei righe non incrementi il famoso contatore nascosto e quindi viene rimandato all’unico valore puntato dalla inizializzazione del contatore.
              Scommetto che se fai andare pdflatex un paio di volte, nel file log ci trovi dei messaggi che quell’anchor è già stato usato e che gli altri nookmark allo stesso anchor vengon ignorati.

              Allora ti propongo quest’àltra cosa;

              Decommenta quell sei righe, ma prima di ogni \addcontentsline mettici il comando \phantomsection; questo inserisce un altro anchor diverso da quello che hyperref avrebbe spontaneamente usato e non dovrebbe generarsi un duplicato di bookmark. naturalmente quello che aggiungi deve contenere un testo completamente diverso da quello che compare nel titoli dei song adiacenti.

              Naturalmente, non scrivendo canzoni, e non usando il pacchetto songs (che in TeX Live non c’è), può darsi benissimo che ti abbia scritto delle fesserie; tuttavia, dalla piccola esperienza che mi sono fatto con hyperref ho trovato dhe \phantomsection cura moltissimi mali.

            • #68651
              franen
              Partecipante
                Up
                0
                Down
                ::


                Grazie Claudio.
                Avevo già provato con phantomsection e pareva non funzionare, stasera invece funziona tutto! Quindi commentando del codice in songs.sty e aggiungendo la mia definizione ottengo il risultato voluto. Non è proprio la via che auspicavo, ma è pur sempre una soluzione!

                Francesco

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

            Go to top