boolean parameter etoolbox

  • Creatore
    Topic
  • #101914
    claudio
    Partecipante
      Up
      0
      Down
      ::


      salve sto pasticciando con i pacchetti e in particolare come passare un parametro ad un pacchetto

      riesco a passare un parametro ad un pacchetto ma non riesco a passare un
      parametro booleano mi spiego con po di codice
      `
      \NeedsTeXFormat{LaTeX2e}[1994/06/01]
      \ProvidesPackage{custom}[2013/01/13 Custom Package]
      \RequirePackage{etoolbox}

      \newcommand{\opzione}{prova}
      \newif\if@compatta
      \@compattafalse
      \DeclareOption{compatta}{\@compattatrue}

      \DeclareOption{carlo}{
      \renewcommand{\opzione}{carlo}
      }
      \DeclareOption{luca}{
      \renewcommand{\opzione}{luca}
      }

      \ExecuteOptions{custom}

      \ProcessOptions\relax

      \newcommand{\nomi}{\opzione
      \ifboolexpr{compatta }{compatta}{non compatta}
      }
      \endinput
      `

      `
      \documentclass[10pt,a4paper]{book}
      \usepackage[utf8]{inputenc}
      \usepackage[luca,compatta]{custom}
      \begin{document}
      \nomi
      \end{document}
      `
      il file passa al pacchetto custom due parametri luca e compatta
      ma il tutto non funziona
      o meglio non funziona la parte booleana
      dove sbaglio?
      grazie del vostro tempo
      claudio

      nota
      etoolbox mi serve quindi mi serve una soluzione che lo coinvolga

    Visualizzazione 2 filoni di risposte
    • Autore
      Risposte
      • #101915
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Non capisco bene quello che vorresti fare, ma \ExecuteOptions{

          A parte etoolbox, che è un pacchetto potentissimo, ma che va usato con cautela; io ho perso parecchio tempo cercando di usare il comando \ifcsvoid, pur avendo letto la sua descrizione fino a conoscerla a memoria, perché funziona benissimo tranne quando la cs che deve controllare non è vuota ma contiene una stringa che corrisponde al nome di un comando già definito. Poi ho scoperto qual era l’inghippo, ma mi ci è voluta una paziente analisi eseguita con il tracciamento dei singoli comandi seguiti.

          Ma secondo me ti farebbe bene rileggere con attenzione la clsguide con il comando texdoc clsguide dato in una finestra comandi, in particolare il paragrafo 4.7. Sono sicuro che puoi passare le opzioni ad un pacchetto, mentre un pacchetto non può passare opzioni ad un altro pacchetto se non esplitandole all’altro pacchetto che deve a sua volta contenerne le definizioni; solo le opzioni di classe hanno lo stato di opzioni globali; quelle dei pacchetti sono conosciute solo all’interno del loro pacchetto, non possono essere globali.

          Poi visto che carichi il pacchetto etooolbox, puoi definire tutte le variabili booleane o i toggle con la sintassi di etoolbox, non con \newif, anche se etoolbox riesce a gestire anche le vecchie definizioni.

        • #101916
          claudio
          Partecipante
            Up
            0
            Down
            ::


            la notte porta consiglio

            ora funziona

            `
            \NeedsTeXFormat{LaTeX2e}[1994/06/01]
            \ProvidesPackage{custom}[2013/01/13 Custom Package]
            \RequirePackage{etoolbox}

            \newcommand{\opzione}{prova}

            \newbool{compatta}
            \setbool{compatta}{false}
            \DeclareOption{compatta}{\setbool{compatta}{true}}

            \DeclareOption{carlo}{
            \renewcommand{\opzione}{carlo}
            }
            \DeclareOption{luca}{
            \renewcommand{\opzione}{luca}
            }

            \ProcessOptions\relax

            \newcommand{\nomi}{\opzione
            \ifbool{compatta}{compatta}{non compatta}}

            \endinput
            `
            ciao
            claudio

          • #101917
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Una nota che è OT in relazione al titolo del tuo thread, ma che ha a che fare con il codice che hai allegato sia ieri sia oggi:`\NeedsTeXFormat{LaTeX2e}[1994/06/01]`La data che hai specificato come data necessaria per usare ilformatoLaTeX2e, è la data della suanascita, cioè più di 20 anni fa. Specificare la data di nascita è come non specificare niente. Se infatti usi il comando \NeedsTeXFormat, che non era definito in LaTeX209, non è possibile usare LaTeX209 (quello originale) e se lo facessi avresti un messaggio di Undefined control sequence. Se usassi la dichiarazione iniziale di LaTeX209, \documentstyle, specificando i pacchetti come opzioni, useresti comunque LaTeX2e in modalità di compatibilità e la sua data sarebbe comunque almeno quella di nascita o successiva, quindi la specificazione è inutile.

              È difficile scoprire la data della versione di LaTeX2e che sta in effetti girando sullle nostre macchine; nella prima riga del file log compare la data di creazione del file di formato, non la data dell’ultima release del file sorgente del formato. Ma se apri il file latex.ltx nell’albero principale del sistema TeX (su TeXLive è …/texlive/2014/texmf-dist/tex/latex/base/) alla riga 524 trovi scritto [tt]\edef\fmtversion{2014/05/01}[/tt]; Subito dopo c’è un \iffalse…\fi che contiene il codice per avvisare l’utente che sta per creare un file di formato con una versione vecchia del file sorgente; il codice è commentato perché la versione distribuita è aggiornata, ma probabilmente quel tratto di codice è rimasto “metacommentato” per permettere di eseguire dei test (“metadecommentandolo”) quando il Team che se ne occupa fa le sue prove.

              Ma, in conclusione, con la versione oggi in vigore ancora con la distribuzione 2014 la data del codice è il primo di maggio del 2014, 20 anni successiva alla data da te specificata…:smile:

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

          Go to top