patchcmd e spazi spuri

  • Creatore
    Topic
  • #65330
    Up
    0
    Down
    ::


    Stavo cercando di definire un comando che mi consenta di riferirmi alle etichette usando numeri ordinali, anziché i cardinali. Ho pensato di “patchare” i comandi definiti da hyperref:
    `
    \documentclass[12pt]{article}
    \usepackage[T1]{fontenc}
    \usepackage[italian]{babel}
    \usepackage{etoolbox}
    \usepackage[colorlinks,linkcolor=blue]{hyperref}
    \usepackage{itnumpar}

    \makeatletter
    \def\@ordref#1#2{%
    \begingroup
    $\rightarrow$\patchcmd{\T@ref}{\@firstoffive}{{\expandafter#1\@firstoffive}}\relax\relax$\leftarrow$%
    \ref{#2}%
    \endgroup}
    \newcommand\ordreff{%
    \@ordref\printordinalef}
    \newcommand\ordrefm{%
    \@ordref\printordinalem}
    \makeatletter

    \begin{document}
    \section{Primo paragrafo}
    \label{cap:primo}
    \centering

    \fboxsep=0pt
    \fbox{\ordreff{cap:primo}} \quad \fbox{\ordrefm{cap:primo}}
    \end{document}`

    Il problema è che vengono inseriti degli spazi spuri:

    Il comando \T@ref è definito in questo modo:
    `
    \def\T@ref#1{%
    \Hy@safe@activestrue
    \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
    \Hy@safe@activesfalse
    }%`

    A chi sono dovuti gli spazi spuri? Come si risolve?
    Esiste un modo migliore per fare quello che sto cercando di fare?

    Grazie,
    Antonio

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #65331
      Up
      0
      Down
      ::

      antonio.macrì” post=64355Stavo cercando di definire un comando che mi consenta di riferirmi alle etichette usando numeri ordinali, anziché i cardinali. Ho pensato di “patchare” i comandi definiti da hyperref:
      `
      \documentclass[12pt]{article}
      \usepackage[T1]{fontenc}
      \usepackage[italian]{babel}
      \usepackage{etoolbox}
      \usepackage[colorlinks,linkcolor=blue]{hyperref}
      \usepackage{itnumpar}

      \makeatletter
      \def\@ordref#1#2{%
      \begingroup
      $\rightarrow$\patchcmd{\T@ref}{\@firstoffive}{{\expandafter#1\@firstoffive}}\relax\relax$\leftarrow$%
      \ref{#2}%
      \endgroup}
      \newcommand\ordreff{%
      \@ordref\printordinalef}
      \newcommand\ordrefm{%
      \@ordref\printordinalem}
      \makeatletter

      \begin{document}
      \section{Primo paragrafo}
      \label{cap:primo}
      \centering

      \fboxsep=0pt
      \fbox{\ordreff{cap:primo}} \quad \fbox{\ordrefm{cap:primo}}
      \end{document}`

      Il problema è che vengono inseriti degli spazi spuri:

      Il comando \T@ref è definito in questo modo:
      `
      \def\T@ref#1{%
      \Hy@safe@activestrue
      \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
      \Hy@safe@activesfalse
      }%`

      A chi sono dovuti gli spazi spuri? Come si risolve?
      Esiste un modo migliore per fare quello che sto cercando di fare?

      Non mi pare una buona idea quella di eseguire \patchcmd a ogni esecuzione. E poi
      `{\expandafter#1\@firstoffive}`
      non ha molto senso.

      Carica refcount e definisci
      `\def\@ordref#1#2{#1{\getrefnumber{#2}}}`
      Ciao
      Enrico

    • #65332
      Up
      0
      Down
      ::

      egreg9″ post=64361
      Non mi pare una buona idea quella di eseguire \patchcmd a ogni esecuzione. E poi
      `{\expandafter#1\@firstoffive}`
      non ha molto senso.

      Sì, non mi convinceva granché.

      Carica refcount e definisci
      `\def\@ordref#1#2{#1{\getrefnumber{#2}}}`
      Ciao
      Enrico

      Grazie mille!
      Ciao!

    • #65333
      Up
      0
      Down
      ::


      Ma, per curiosità, a cosa erano dovuti gli spazi spuri?
      Lo chiedo perché magari il problema mi si potrebbe ripresentare.

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

Go to top