\textmu e \@ifundefined

  • Creatore
    Topic
  • #42532
    Up
    0
    Down
    ::


    Ciao a tutti,

    cerco di tenere il mio database BibTeX il più libero possibile da comandi LaTeX,
    ma a volte capita di non poter fare altrimenti.
    Ho alcuni record contenenti nel titolo il simbolo micro, reso con \textmu
    (comando del pacchetto textcomp).

    Per mantenere il database compatibile con “qualsiasi” preambolo ho provato a
    definire nella direttiva @PREAMBLE il comando \textmu in questo modo:
    \makeatletter
    \@ifundefined{textmu}{\newcommand{\textmu}{\ensuremath{\mu}}}{}
    \makeatother

    Purtroppo però il comando \textmu, sebbene dia errore (Command \textmu unavailable in
    encoding . . .), sembra essere definito anche senza caricare textcomp!
    Per questo motivo il comando \@ifundefined viene ignorato.

    L’unico modo che mi viene in mente per aggirare il problema è definire \textmu
    solo quando textcomp non è caricato, ma non so come si fa 🙁
    In generale mi piacerebbe capire perché si ha questo comportamento e non
    un semplice command undefined.

    [edit]
    Aggiungo un EMC:
    `\documentclass[a4paper]{article}

    \makeatletter
    \@ifundefined{textmu}{\newcommand{\textmu}{pippo}}{}
    \makeatother

    \begin{document}

    \textmu

    \end{document}
    `[/edit]

    Grazie mille.
    Ciao ciao.
    Fra

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #42533
      Up
      0
      Down
      ::

      Ciao a tutti,

      cerco di tenere il mio database BibTeX il più libero possibile da comandi LaTeX,
      ma a volte capita di non poter fare altrimenti.
      Ho alcuni record contenenti nel titolo il simbolo micro, reso con \textmu
      (comando del pacchetto textcomp).

      Per mantenere il database compatibile con “qualsiasi” preambolo ho provato a
      definire nella direttiva @PREAMBLE il comando \textmu in questo modo:
      \makeatletter
      \@ifundefined{textmu}{\newcommand{\textmu}{\ensuremath{\mu}}}{}
      \makeatother

      Purtroppo però il comando \textmu, sebbene dia errore (Command \textmu unavailable in
      encoding . . .), sembra essere definito anche senza caricare textcomp!
      Per questo motivo il comando \@ifundefined viene ignorato.

      L’unico modo che mi viene in mente per aggirare il problema è definire \textmu
      solo quando textcomp non è caricato, ma non so come si fa 🙁
      In generale mi piacerebbe capire perché si ha questo comportamento e non
      un semplice command undefined.

      [edit]
      Aggiungo un EMC:
      `\documentclass[a4paper]{article}

      \makeatletter
      \@ifundefined{textmu}{\newcommand{\textmu}{pippo}}{}
      \makeatother

      \begin{document}

      \textmu

      \end{document}
      `[/edit]

      Naturalmente ti sarai reso conto che l’EMC non dà alcun errore.

      Ciao
      Enrico

    • #42534
      Up
      0
      Down
      ::

      Naturalmente ti sarai reso conto che l’EMC non dà alcun errore.

      Naturalmente sono un cretino!

      Quanto descritto sopra accade solo se carico anche hyperref:
      `\documentclass[a4paper]{article}
      \usepackage{hyperref}

      \makeatletter
      \@ifundefined{textmu}{\newcommand{\textmu}{pippo}}{}
      \makeatother

      \begin{document}
      \textmu
      \end{document} `

      Scusatemi. 😳
      Ciao ciao.
      Fra

    • #42535
      Up
      0
      Down
      ::

      Naturalmente ti sarai reso conto che l’EMC non dà alcun errore.

      Naturalmente sono un cretino!

      Quanto descritto sopra accade solo se carico anche hyperref:
      `\documentclass[a4paper]{article}
      \usepackage{hyperref}

      \makeatletter
      \@ifundefined{textmu}{\newcommand{\textmu}{pippo}}{}
      \makeatother

      \begin{document}
      \textmu
      \end{document} `

      Scusatemi. 😳

      Il problema è che hyperref definisce \textmu per la codifica PD1 (che è quella che usa internamente per i collegamenti, i segnalibri e varie diavolerie).
      `\DeclareTextCommandDefault{\textmu}{$\mu$}`
      Ciao
      Enrico

    • #42536
      Up
      0
      Down
      ::


      Ecco dov’era il problema!

      Grazie mille Enrico!

      Ciao ciao.
      Fra

    • #42537
      Up
      0
      Down
      ::


      Mi permetto di correggere Enrico! (Sperando di non fare una figuraccia :D)
      Per fare quello che chiedevo si ha bisogno del comando
      \ProvideTextCommandDefault.

      Ecco l’esempio minimo in cui si può commentare o meno textcomp
      e non si ottiene alcun errore durante la compilazione.

      `\documentclass[a4paper]{article}

      \usepackage{textcomp}
      \usepackage{hyperref}

      \ProvideTextCommandDefault{\textmu}{$\mu$}

      \begin{document}
      \textmu
      \end{document}`

      Ciao ciao.
      Fra

    • #42538
      Up
      0
      Down
      ::

      Mi permetto di correggere Enrico! (Sperando di non fare una figuraccia :D)
      Per fare quello che chiedevo si ha bisogno del comando
      \ProvideTextCommandDefault.

      Ecco l’esempio minimo in cui si può commentare o meno textcomp
      e non si ottiene alcun errore durante la compilazione.

      `\documentclass[a4paper]{article}

      \usepackage{textcomp}
      \usepackage{hyperref}

      \ProvideTextCommandDefault{\textmu}{$\mu$}

      \begin{document}
      \textmu
      \end{document}`

      Giusto.

      Ciao
      Enrico

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

Go to top