Consigli sull’uso del comando \ifnum

  • Creatore
    Topic
  • #40356
    Up
    0
    Down
    ::


    Salve,

    in questi giorni sto un po “stuadiando” il pacchetto grafico PGF TikZ che trovo molto bello e colorato.

    Il mio metodo è quello di costruire piccole figure, per poi renderle piano piano più difficili, mai però al livello del sito di Kjell Magne Fauske 🙁 .

    Ho scritto questo codice in cui ho incluso dei calcoli in tex che sono funzione della calore \cost che definisco.

    `
    \documentclass{report}

    % PREAMBOLO
    \usepackage[italian]{babel}
    \usepackage{tikz}
    \usepackage{pgffor}

    % DOCUMENTO
    \begin{document}

    \begin{tikzpicture}[scale=0.5]
    \def\cost{20}
    \foreach \x in {1,2,…,\cost}
    {\ifnum\x>\divide\cost by 5

    \ifnum\x>\divide{\multiply\cost by 2} by 3

    \ifnum\x=\cost \draw (\x-1,\x-1)–(\x,\x-1);
    \node at (\x-.5,\x-1) [above]{$n$};
    \else \draw (\x-1,\x-1)–(\x,\x-1)–(\x,\x);
    \node at (\x-.5,\x-1) [above]{$n$-\number\numexpr\cost-\x\relax};
    \fi

    \else \draw[dotted](\x-1,\x-1)–(\x,\x-1)–(\x,\x);
    \fi

    \else \draw(\x-1,\x-1)–(\x,\x-1)–(\x,\x);
    \node at (\x-.5,\x-1) [above]{\x};
    \fi}
    \end{tikzpicture}

    \end{document}

    `

    compilando mi dà il seguente errore:

    `
    ! Missing number, treated as zero.

    \divide
    !.68 \fi}
    `

    Ovviamente se sostituisco a \cost il numero 20, il tutto funziona.

    Immagino che sia un problema di tokens, ma non so che fare..

    Aiuto?

    Grazie in anticipo

    Michele

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

      Salve,

      in questi giorni sto un po “stuadiando” il pacchetto grafico PGF TikZ che trovo molto bello e colorato.

      Il mio metodo è quello di costruire piccole figure, per poi renderle piano piano più difficili, mai però al livello del sito di Kjell Magne Fauske 🙁 .

      Ho scritto questo codice in cui ho incluso dei calcoli in tex che sono funzione della calore \cost che definisco.

      `
      \documentclass{report}

      % PREAMBOLO
      \usepackage[italian]{babel}
      \usepackage{tikz}
      \usepackage{pgffor}

      % DOCUMENTO
      \begin{document}

      \begin{tikzpicture}[scale=0.5]
      \def\cost{20}
      \foreach \x in {1,2,…,\cost}
      {\ifnum\x>\divide\cost by 5
      …`
      compilando mi dà il seguente errore:
      `! Missing number, treated as zero.

      \divide
      !.68 \fi}`
      Ovviamente se sostituisco a \cost il numero 20, il tutto funziona.

      Immagino che sia un problema di tokens, ma non so che fare..

      Aiuto?

      Immagini male. Le istruzioni \divide e \multiply non sono eseguite al momento di calcolare il numero che serve per il confronto, ma sono assegnazioni di valori a registri.

      Esistono istruzioni “espandibili” che fanno ciò che ti serve:
      `\ifnum\x>\numexpr\cost/5\relax`
      confronta il numero contenuto in \x (è una macro che si espande a un numero) con il numero \cost diviso per 5. Occorre notare che la divisione fornisce un risultato arrotondato all’intero più vicino; se ti serve invece la divisione con troncamento devi definirtela (nel preambolo):
      `\newcommand*{\truncdiv}[2]{((#1-(#2-1)/2)/#2)}`
      e usarla dentro \numexpr:
      `\ifnum\x>\numexpr\truncdiv{\cost}{5}`
      Per denotare la moltiplicazione si usa *.

      Per favore, non usare negli esempi di codice.

      Ciao
      Enrico

    • #40358
      Up
      0
      Down
      ::


      grazie mille per la risposta.

      Per non innondare il forum di domande in futuro su cose così “semplici”, ho ordinato proprio oggi il TEXbook.

      P.S. Scusa per i tab, ho fatto un barbaro copia ed incolla.

      Saluti e felice natale a tutti

      Michele

    • #40359
      Up
      0
      Down
      ::

      grazie mille per la risposta.

      Per non inondare il forum di domande in futuro su cose così “semplici”, ho ordinato proprio oggi il TEXbook.

      Saluti e felice natale a tutti

      Buona lettura. Non ci troverai \numexpr, però. 🙂 È una delle estensioni e-TeX che trovi descritta nel manuale relativo (texdoc etex_man; ma se non conosci il TeXbook quel manualetto non lo capisci. 🙂

      Ciao e auguri anche a te
      Enrico

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

Go to top