[Risolto] Problema compatibilità tikzorbital e chemmacros

  • Creatore
    Topic
  • #88900
    Up
    0
    Down
    ::


    Salve a tutti. Come da titolo, ho riscontrato un problema legato proprio a questi due pacchetti, che non riesco a risolvere. Essi definiscono entrambi un nuovo comando [tt]\orbital[/tt] che in entrambi casi fa la stessa cosa: crea un orbitale atomico. Il fatto è che ho provato a caricare prima un pacchetto e poi l’altro e invertire il caricamento, ma in entrambi casi mi ritorna l’errore che il comando sopra citato è già definito (cosa logica, dato che viene definito dal pacchetto concorrente.
    Potrei tenere semplicemente la macro definita da [tt]chemmacros[/tt], che è il pacchetto che mi interessa, di più, ma l’altro pacchetto definisce un comando a mio avviso “migliore”. Come posso fare per non farli “bisticciare” tra loro? Esiste qualche comando da dare direttamente dal file che compilo, senza dovermi copiare il file .sty del pacchetto e modificarne il contenuto?

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


      Mi lancio in una proposta: rendi indefinito [tt]\orbital[/tt] in mezzo al caricamento dei due pacchetti
      `\usepackage{chemmacros}
      \let\orbital\relax
      \usepackage{tikzorbital}`
      Ho verificato che compila, ma non so se [tt]\orbital[/tt] funzionerà bene o ci saranno altri effetti collaterali

    • #88902
      Up
      0
      Down
      ::


      Grandissimo! 😀 La tua soluzione è perfetta e assolutamente elegante. Avevo pensato anch’io all’uso di [tt]\let[/tt], ma definivo un nuovo comando invece che “svuotare” [tt]\orbital[/tt]. Addiritura sono riuscito a salvare capra e cavoli usando il codice:
      `
      \usepackage{chemmacros}
      \let\chemorbital\orbital
      \let\orbital\relax
      \usepackage{tikzorbital}
      `
      posso usarli tutti e due e il conflitto non c’è più.

      Posso solo chiederti una cosa: il comando [tt]\relax[/tt], che ho già notato in molte definizioni avanzate di macro, a cosa serve? So solo che è un comando di basso livello, sicuramente importante per definire le macro.

    • #88903
      Up
      0
      Down
      ::

      skevin93″ post=88315Posso solo chiederti una cosa: il comando [tt]\relax[/tt], che ho già notato in molte definizioni avanzate di macro, a cosa serve? So solo che è un comando di basso livello, sicuramente importante per definire le macro.

      Devo essere sincero? Non ho la più pallida idea di cosa faccia in dettaglio, però in passato ho incontrato spesso l’espressione [tt]\let\COMANDO\relax[/tt] per rendere indefinito un comando. Trovi un paio di spiegazioni qui:
      http://tex.stackexchange.com/questions/86385/what-is-the-difference-between-relax-and
      http://tex.stackexchange.com/questions/49071/difference-between-let-foo-relax-and-def-foo-for-disabling
      http://tex.stackexchange.com/questions/20655/how-to-undo-a-def-i-e-need-a-undef-capability

    • #88904
      Up
      0
      Down
      ::

      skevin93″ post=88315Grandissimo! 😀 La tua soluzione è perfetta e assolutamente elegante. Avevo pensato anch’io all’uso di [tt]\let[/tt], ma definivo un nuovo comando invece che “svuotare” [tt]\orbital[/tt]. Addiritura sono riuscito a salvare capra e cavoli usando il codice:
      `
      \usepackage{chemmacros}
      \let\chemorbital\orbital
      \let\orbital\relax
      \usepackage{tikzorbital}
      `
      posso usarli tutti e due e il conflitto non c’è più.

      Posso solo chiederti una cosa: il comando [tt]\relax[/tt], che ho già notato in molte definizioni avanzate di macro, a cosa serve? So solo che è un comando di basso livello, sicuramente importante per definire le macro.

      Con [tt]\let\orbital\relax[/tt] rendi il comando [tt]\orbital[/tt] indefinito, almeno per il criterio di LaTeX: la decisione se un comando è indefinito si basa su una costruzione che, nel caso un token sia indefinito lo rende equivalente a [tt]\relax[/tt].

      Puoi fare di meglio:
      `\usepackage{savesym}

      \usepackage{chemmacros}
      \savesymbol{orbital}
      \usepackage{tikzorbital}
      \restoresymbol{tikz}{orbital}
      \restoresymbol{chem}{orbital}`
      dopo di che avrai a disposizione [tt]\tikzorbital[/tt] e [tt]\chemorbital[/tt]. Anche [tt]\orbital[/tt] che sarà equivalente a [tt]\chemorbital[/tt] con questo ordine di caricamento; ma secondo me è meglio tenere ben distinti i due comandi. Se preferisci l’ordine inverso di caricamento, sarà
      `\usepackage{savesym}

      \usepackage{tikzorbital}
      \savesymbol{orbital}
      \usepackage{chemmacros}
      \restoresymbol{chem}{orbital}
      \restoresymbol{tikz}{orbital}`
      e, in questo caso, [tt]\orbital[/tt] sarà equivalente a [tt]\tikzorbital[/tt]. Vedi bene perché suggerisco di non usare [tt]\orbital[/tt].

      Ciao
      Enrico

    • #88905
      Up
      0
      Down
      ::


      Grazie alle votsre risposte, @egreg e @Elrond. Dai post indicati ho capito che [tt]\relax[/tt] non fa ‘niente’, o meglio, è un token non espandibile che ferma latex dal continuare ad espandere i token, comodo in alcune situazioni.

      Per quanto riguarda il codice di @egreg, ti ringrazio applicherò quest’altra via. Il nuovo comando [tt]\tikzorbital[/tt] serve per non fare confusione? Nel senso, in questo modo dal nome riesco a risalire subito da che pacchetto è tratto. Grazie anche per il pacchetto, che ho scoperto essere stato creato proprio per questi casi di conflitto :D.

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

Go to top