Soluzione euristica ai rimandi errati da sezioni stellate?

  • Creatore
    Topic
  • #28730
    Up
    0
    Down
    ::


    Oggi, aggiornando hyperref, pensavo di risolvere alcuni dei problemi
    che questo pacchetto produce; tra questi problemi, quello più fastidioso
    è senza dubbio la creazione di collegamenti a posizioni
    *sbagliate* nel testo a partire dai link nell’output in PDF
    (dall’indice analitico i collegamenti non riportano sulla riga
    della parola collegata, dall’indice si finisce in posizioni strane
    se si usano i sezionamenti stellati, nelle figure/tabelle, se non si
    usa hypcap o si mette la caption *sopra* l’oggetto flottante, si finisce
    a volte nella pagina successiva a quella corretta…)

    Non essendo un texnico ma solo un utente curioso di LaTeX ho
    cercato di risolvere almeno il problema dei collegamenti stellati
    sbagliati. A furia di ricerche e tentativi ho provato a ridefinire
    section (e subsection, …) usando del codice trovato in rete (e riportato
    sotto). Con questa ridefinizione si ottengono collegamenti corretti, cioè:

    se clicco nell’indice su

    Sezione non numerata…. 10

    Adobe Reader mi sposta sul titolo “Sezione non numerata” creato da

    `
    \section*{Sezione non numerata}
    `

    e non esattamente sotto di esso.

    Il codice originale (essendo già troppo texnico per me) non è farina del
    mio sacco ed essendomi solo limitato a modificarlo “a naso”,
    non so perchè funziona nè tanto meno se produce danni collaterali…

    `
    %% Ridefinizione section e subsection per bypassare il problema
    %% dei collegamenti stellati non funzionanti di hyperref

    %% Ridefinizione section
    \makeatletter
    \def\section{\@ifstar\unnumberedsection\numberedsection}
    \def\numberedsection{\@ifnextchar[%]
    \numberedsectionwithtwoarguments\numberedsectionwithoneargument}
    \def\unnumberedsection{\@ifnextchar[%]
    \unnumberedsectionwithtwoarguments\unnumberedsectionwithoneargument}
    \def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
    \def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
    \def\numberedsectionwithtwoarguments[#1]#2{%
    \ifhmode\par\fi
    \removelastskip
    \vskip 3ex\goodbreak
    \refstepcounter{section}%
    \noindent
    \begingroup
    \leavevmode\scriptsize\bfseries\raggedright
    %\llap{\thesection\quad}%
    \llap{\quad}%
    #2
    \par
    \endgroup
    \vskip 2ex\nobreak
    \addcontentsline{toc}{section}{%
    % \protect\numberline{\thesection}%
    #1}%
    }
    \def\unnumberedsectionwithtwoarguments[#1]#2{%
    \ifhmode\par\fi
    \removelastskip
    \vskip 3ex\goodbreak
    % \refstepcounter{section}%
    \noindent
    \begingroup
    \leavevmode\scriptsize\bfseries\raggedright
    \leavevmode\scriptsize\bfseries\raggedright
    % \thesection\quad
    #2
    \par
    \endgroup
    \vskip 2ex\nobreak
    \addcontentsline{toc}{section}{%
    % \protect\numberline{\thesection}%
    #1}%
    }
    \makeatother

    `

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #28731
      Up
      0
      Down
      ::

      Oggi, aggiornando hyperref, pensavo di risolvere alcuni dei problemi
      che questo pacchetto produce; tra questi problemi, quello più fastidioso
      è senza dubbio la creazione di collegamenti a posizioni
      *sbagliate* nel testo a partire dai link nell’output in PDF
      (dall’indice analitico i collegamenti non riportano sulla riga
      della parola collegata, dall’indice si finisce in posizioni strane
      se si usano i sezionamenti stellati, nelle figure/tabelle, se non si
      usa hypcap o si mette la caption *sopra* l’oggetto flottante, si finisce
      a volte nella pagina successiva a quella corretta…)

      Non essendo un texnico ma solo un utente curioso di LaTeX ho
      cercato di risolvere almeno il problema dei collegamenti stellati
      sbagliati. A furia di ricerche e tentativi ho provato a ridefinire
      section (e subsection, …) usando del codice trovato in rete (e riportato
      sotto). Con questa ridefinizione si ottengono collegamenti corretti, cioè:

      se clicco nell’indice su

      Sezione non numerata…. 10

      Adobe Reader mi sposta sul titolo “Sezione non numerata” creato da

      `
      \section*{Sezione non numerata}
      `

      e non esattamente sotto di esso.

      Il codice originale (essendo già troppo texnico per me) non è farina del
      mio sacco ed essendomi solo limitato a modificarlo “a naso”,
      non so perchè funziona nè tanto meno se produce danni collaterali…

      `
      %% Ridefinizione section e subsection per bypassare il problema
      %% dei collegamenti stellati non funzionanti di hyperref

      %% Ridefinizione section
      \makeatletter
      \def\section{\@ifstar\unnumberedsection\numberedsection}
      \def\numberedsection{\@ifnextchar[%]
      \numberedsectionwithtwoarguments\numberedsectionwithoneargument}
      \def\unnumberedsection{\@ifnextchar[%]
      \unnumberedsectionwithtwoarguments\unnumberedsectionwithoneargument}
      \def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
      \def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
      \def\numberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\scriptsize\bfseries\raggedright
      %\llap{\thesection\quad}%
      \llap{\quad}%
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \def\unnumberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      % \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\scriptsize\bfseries\raggedright
      \leavevmode\scriptsize\bfseries\raggedright
      % \thesection\quad
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \makeatother

      `

      Non mi risulta che questo codice riesca a fare ciò che chiedi. A parte la bruttura tipografica di un titolo di sezione scritto in caratteri più piccoli del corpo del documento, non c’è nulla che faccia pensare che hyperref possa trovare i titoli delle sezioni non numerate.

      Puoi, per favore, mostrare un pezzo di codice che funzioni?

      Quel codice, sappilo, fa abbastanza orrore. Se vuoi sezioni numerate, perché mai non componi il numero, per esempio?

      Ciao
      Enrico

    • #28732
      Up
      0
      Down
      ::


      Scusa ma ho visto solo ora la tua risposta.

      A me questo esempio funziona come mi aspetto. I commenti sono
      nel documento.

      `
      \documentclass{report}

      \usepackage{hyperref}
      \usepackage[T1]{fontenc}
      \usepackage[italian]{babel}
      \usepackage{lipsum}

      %% Ridefinizione section e subsection per bypassare il problema
      %% dei collegamenti stellati non funzionanti di hyperref

      %% Ridefinizione section
      \makeatletter
      \def\section{\@ifstar\unnumberedsection\numberedsection}
      \def\numberedsection{\@ifnextchar[%]
      \numberedsectionwithtwoarguments\numberedsectionwithoneargument}
      \def\unnumberedsection{\@ifnextchar[%]
      \unnumberedsectionwithtwoarguments\unnumberedsectionwithoneargument}
      \def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
      \def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
      \def\numberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\bfseries\raggedright
      %\llap{\thesection\quad}%
      \llap{\quad}%
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \def\unnumberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      % \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\bfseries\raggedright
      \leavevmode\bfseries\raggedright
      % \thesection\quad
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \makeatother

      \begin{document}

      \tableofcontents

      \section{Sezione non numerata (senza asterisco)}

      C'era scriptsize prima perchè \emph{ce l'avevo messo io}
      per adattare i titoli al testo in cui andavano a sezionare… si può togliere ovviamente.

      Qui i collegamenti a me funzionano perchè semplicemente vengono eliminati
      i numeri di sezione.

      Se usassi section* senza ridefinire section come nel post dal collegamento in indice
      andrei a finire sotto il titolo.

      \subsection{Sottosezione numerata}

      Se ridefinissi anche subsection funzionerebbe anche… qui funziona perchè
      ci sta il numero di sottosezione.

      \lipsum

      \subsection*{Sottosezione stellata}

      Qui subsection non funziona… il rimando infatti è sotto il titolo.

      \lipsum

      \section{Soluzione?}

      Non lo è di certo… sto solo dicendo che così si evita il fastidioso
      problema dei rimandi che non fanno vedere il titolo.

      \lipsum

      \section{Saluti}

      Grazie per l'attenzione e i consigli.

      \lipsum

      \end{document}`

    • #28733
      Up
      0
      Down
      ::

      Scusa ma ho visto solo ora la tua risposta.

      A me questo esempio funziona come mi aspetto. I commenti sono
      nel documento.

      `
      \documentclass{report}

      \usepackage{hyperref}
      \usepackage[T1]{fontenc}
      \usepackage[italian]{babel}
      \usepackage{lipsum}

      %% Ridefinizione section e subsection per bypassare il problema
      %% dei collegamenti stellati non funzionanti di hyperref

      %% Ridefinizione section
      \makeatletter
      \def\section{\@ifstar\unnumberedsection\numberedsection}
      \def\numberedsection{\@ifnextchar[%]
      \numberedsectionwithtwoarguments\numberedsectionwithoneargument}
      \def\unnumberedsection{\@ifnextchar[%]
      \unnumberedsectionwithtwoarguments\unnumberedsectionwithoneargument}
      \def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
      \def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
      \def\numberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\bfseries\raggedright
      %\llap{\thesection\quad}%
      \llap{\quad}%
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \def\unnumberedsectionwithtwoarguments[#1]#2{%
      \ifhmode\par\fi
      \removelastskip
      \vskip 3ex\goodbreak
      % \refstepcounter{section}%
      \noindent
      \begingroup
      \leavevmode\bfseries\raggedright
      \leavevmode\bfseries\raggedright
      % \thesection\quad
      #2
      \par
      \endgroup
      \vskip 2ex\nobreak
      \addcontentsline{toc}{section}{%
      % \protect\numberline{\thesection}%
      #1}%
      }
      \makeatother

      \begin{document}

      \tableofcontents

      \section{Sezione non numerata (senza asterisco)}

      C'era scriptsize prima perchè \emph{ce l'avevo messo io}
      per adattare i titoli al testo in cui andavano a sezionare… si può togliere ovviamente.

      Qui i collegamenti a me funzionano perchè semplicemente vengono eliminati
      i numeri di sezione.

      Se usassi section* senza ridefinire section come nel post dal collegamento in indice
      andrei a finire sotto il titolo.

      \subsection{Sottosezione numerata}

      Se ridefinissi anche subsection funzionerebbe anche… qui funziona perchè
      ci sta il numero di sottosezione.

      \lipsum

      \subsection*{Sottosezione stellata}

      Qui subsection non funziona… il rimando infatti è sotto il titolo.

      \lipsum

      \section{Soluzione?}

      Non lo è di certo… sto solo dicendo che così si evita il fastidioso
      problema dei rimandi che non fanno vedere il titolo.

      \lipsum

      \section{Saluti}

      Grazie per l'attenzione e i consigli.

      \lipsum

      \end{document}`

      Da quello che capisco, vuoi che le sezioni non siano numerate (e quindi nemmeno le sottosezioni). Invece di tutta quella schifezza :), perché non scrivere semplicemente
      `\setcounter{secnumdepth}{0} % numera solo i capitoli
      \setcounter{tocdepth}{2} % nell'indice vanno anche le sottosezioni`
      che mi sembra leggermente più semplice? 🙂

      Userai direttamente \section e \subsection senza altri problemi.

      Ciao
      Enrico

    • #28734
      Up
      0
      Down
      ::

      Da quello che capisco, vuoi che le sezioni non siano numerate (e quindi nemmeno le sottosezioni). Invece di tutta quella schifezza :), perché non scrivere semplicemente
      `\setcounter{secnumdepth}{0} % numera solo i capitoli
      \setcounter{tocdepth}{2} % nell'indice vanno anche le sottosezioni`
      che mi sembra leggermente più semplice? 🙂
      Userai direttamente \section e \subsection senza altri problemi.

      …sarebbe troppo facile 😉
      In realtà così non mi funziona. Se provi a compilare lo stesso codice con
      le due righe sopra si ottiene un PDF con le stesse beghe nei rimandi
      dall’indice: i collegamenti portano SOTTO il titolo!

      Il codice che ho postato effettivamente è orribile anche per me che non
      non lo capisco *in profondità*. L’avevo postato anche per capire come
      semplificarlo visto che funzionava… mi consola però che il _mio_
      giudizio estetico non dipenda (solo) dalla _mia_ ignoranza in ambito texnico.

      Ciao.

    • #28735
      Up
      0
      Down
      ::

      Da quello che capisco, vuoi che le sezioni non siano numerate (e quindi nemmeno le sottosezioni). Invece di tutta quella schifezza :), perché non scrivere semplicemente
      `\setcounter{secnumdepth}{0} % numera solo i capitoli
      \setcounter{tocdepth}{2} % nell'indice vanno anche le sottosezioni`
      che mi sembra leggermente più semplice? 🙂
      Userai direttamente \section e \subsection senza altri problemi.

      …sarebbe troppo facile 😉
      In realtà così non mi funziona. Se provi a compilare lo stesso codice con
      le due righe sopra si ottiene un PDF con le stesse beghe nei rimandi
      dall’indice: i collegamenti portano SOTTO il titolo!

      Il codice che ho postato effettivamente è orribile anche per me che non
      non lo capisco *in profondità*. L’avevo postato anche per capire come
      semplificarlo visto che funzionava… mi consola però che il _mio_
      giudizio estetico non dipenda (solo) dalla _mia_ ignoranza in ambito texnico.

      `\usepackage{titlesec}
      \titleformat{\section}[hang]{\Large\bfseries}{}{0pt}{}
      \titleformat{\subsection}[hang]{\large\bfseries}{}{0pt}{}

      \makeatletter
      \let\l@@section\l@section
      \def\l@section#1#2{%
      \begingroup\let\numberline\@gobble\l@@section{#1}{#2}\endgroup}
      \let\l@@subsection\l@subsection
      \def\l@subsection#1#2{%
      \begingroup\let\numberline\@gobble\l@@subsection{#1}{#2}\endgroup}
      \makeatother`
      Ciao
      Enrico

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

Go to top