if then multipli

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


      ho un problema con questi if annidati
      in pratica la label T_5
      mi appare due volte
      ne vedete il motivo?

      grazie
      claudio

      `
      \documentclass[12pt,a4paper]{article}
      \usepackage{graphicx}
      \usepackage{amsmath,amssymb}
      \usepackage{tikz}
      \usetikzlibrary{calc}
      \usetikzlibrary{hobby}
      \usetikzlibrary{decorations}
      \usetikzlibrary{shapes,arrows,trees,positioning,through,intersections}
      \usetikzlibrary{shapes.gates.logic.US,shapes.gates.logic.IEC}
      \usepackage{xifthen}
      \newcommand{\stampa}[3]{
      \ifthenelse{#1=1}
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};
      }
      {
      \ifthenelse{#1=2}
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};
      }
      {
      \ifthenelse{#1=3}
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};
      }
      {
      \ifthenelse{#1=4}
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};
      }
      {
      \ifthenelse{#1=5}
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below right] {$#3$};
      }
      {
      \ifthenelse{#1=6}
      }
      {
      \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};
      }
      }}}}}

      \begin{document}

      \begin{tikzpicture}[>=triangle 45,scale=0.8] %, x=0.8cm,y=0.8cm]
      % draw the coordinates

      \pgfmathsetmacro{\raggio}{4};
      \pgfmathsetmacro{\mraggio}{\raggio/3};
      \pgfmathsetmacro{\qraggio}{\raggio/5};
      \pgfmathsetmacro{\sraggio}{1.9*\raggio};
      % draw the unit circle
      \draw[->] (0,-\raggio-\mraggio) — (0,\raggio+\mraggio+0.5) node[above,fill=white] {$y$};
      \draw[->] (-\raggio-\mraggio,0) — (\raggio+\mraggio,0) node[right,fill=white] {$x$};
      \draw[thick] (0,0) circle(\raggio);
      \draw (\raggio,-\raggio-\mraggio) — (\raggio,\raggio+\mraggio+0.5);
      \node(OO)at(0,0) [label= below right:$O$] {};

      \foreach \x/\z /\y in {
      0/1/ T_1,
      40/2/T_2,
      140/3/T_3,
      180/4/T_4,
      210/5/T_5,
      340/6/T_6
      }
      \stampa{\z}{\x}{\y};
      \end{tikzpicture}

      \end{document}

      `

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

        claudio” post=79221ho un problema con questi if annidati
        in pratica la label T_5
        mi appare due volte
        ne vedete il motivo?

        No, mi sono perso nell’annidamento. 🙂

        `\newcommand{\stampa}[3]{%
        \ifcase#1\relax\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below right] {$#3$};\or
        \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};%
        \fi
        }`
        Quando ci vuole ci vuole. 🙂

        Ciao
        Enrico

      • #80034
        claudio
        Partecipante
          Up
          0
          Down
          ::

          egreg9″ post=79222

          ho un problema con questi if annidati
          in pratica la label T_5
          mi appare due volte
          ne vedete il motivo?

          No, mi sono perso nell’annidamento. 🙂

          `\newcommand{\stampa}[3]{%
          \ifcase#1\relax\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below right] {$#3$};\or
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};%
          \fi
          }`
          Quando ci vuole ci vuole. 🙂

          Ciao
          Enrico

          grazie Enrico
          effettivamente troppe graffe
          Ma è la gestione del condizionale in se che è interessante
          cercando qua e la ho trovato molti pacchetti che hanno in comune solo le graffe
          dove trovare un punto fisso sull’argomento?
          comunque mancava una graffa

          `
          \documentclass[12pt,a4paper]{article}
          \usepackage{graphicx}
          \usepackage{amsmath,amssymb}
          \usepackage{tikz}
          \usetikzlibrary{calc}
          \usetikzlibrary{hobby}
          \usetikzlibrary{decorations}
          \usetikzlibrary{shapes,arrows,trees,positioning,through,intersections}
          \usetikzlibrary{shapes.gates.logic.US,shapes.gates.logic.IEC}
          \usepackage{xifthen}

          \newcommand{\stampa}[3]{
          \ifthenelse{#1=1}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};
          }
          {
          \ifthenelse{#1=2}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};
          }
          {
          \ifthenelse{#1=3}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};
          }
          {
          \ifthenelse{#1=4}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};
          }
          {
          \ifthenelse{#1=5}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};
          }
          {
          \ifthenelse{#1=6}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};
          }
          {

          }
          }
          }
          }
          }
          }
          }

          \begin{document}

          \begin{tikzpicture}[>=triangle 45,scale=0.8]
          % draw the coordinates

          \pgfmathsetmacro{\raggio}{4};
          \pgfmathsetmacro{\mraggio}{\raggio/3};
          \pgfmathsetmacro{\qraggio}{\raggio/5};
          \pgfmathsetmacro{\sraggio}{1.9*\raggio};
          % draw the unit circle
          \draw[->] (0,-\raggio-\mraggio) — (0,\raggio+\mraggio+0.5) node[above,fill=white] {$y$};
          \draw[->] (-\raggio-\mraggio,0) — (\raggio+\mraggio,0) node[right,fill=white] {$x$};
          \draw[thick] (0,0) circle(\raggio);
          \draw (\raggio,-\raggio-\mraggio) — (\raggio,\raggio+\mraggio+0.5);
          \node(OO)at(0,0) [label= below right:$O$] {};

          \foreach \x/\z /\y in {
          0/1/ T_1,
          40/2/T_2,
          140/3/T_3,
          180/4/T_4,
          210/5/T_5,
          340/6/T_6
          }
          \stampa{\z}{\x}{\y};
          \end{tikzpicture}

          \end{document}

          `

          ciao e grazie
          claudio

        • #80035
          Up
          0
          Down
          ::

          claudio” post=79223grazie Enrico
          effettivamente troppe graffe
          Ma è la gestione del condizionale in se che è interessante
          cercando qua e la ho trovato molti pacchetti che hanno in comune solo le graffe
          dove trovare un punto fisso sull’argomento?
          comunque mancava una graffa

          `
          \documentclass[12pt,a4paper]{article}
          \usepackage{graphicx}
          \usepackage{amsmath,amssymb}
          \usepackage{tikz}
          \usetikzlibrary{calc}
          \usetikzlibrary{hobby}
          \usetikzlibrary{decorations}
          \usetikzlibrary{shapes,arrows,trees,positioning,through,intersections}
          \usetikzlibrary{shapes.gates.logic.US,shapes.gates.logic.IEC}
          \usepackage{xifthen}

          \newcommand{\stampa}[3]{
          \ifthenelse{#1=1}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};
          }
          {
          \ifthenelse{#1=2}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};
          }
          {
          \ifthenelse{#1=3}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};
          }
          {
          \ifthenelse{#1=4}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};
          }
          {
          \ifthenelse{#1=5}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};
          }
          {
          \ifthenelse{#1=6}
          {
          \draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};
          }
          {

          }
          }
          }
          }
          }
          }
          }

          \begin{document}

          \begin{tikzpicture}[>=triangle 45,scale=0.8]
          % draw the coordinates

          \pgfmathsetmacro{\raggio}{4};
          \pgfmathsetmacro{\mraggio}{\raggio/3};
          \pgfmathsetmacro{\qraggio}{\raggio/5};
          \pgfmathsetmacro{\sraggio}{1.9*\raggio};
          % draw the unit circle
          \draw[->] (0,-\raggio-\mraggio) — (0,\raggio+\mraggio+0.5) node[above,fill=white] {$y$};
          \draw[->] (-\raggio-\mraggio,0) — (\raggio+\mraggio,0) node[right,fill=white] {$x$};
          \draw[thick] (0,0) circle(\raggio);
          \draw (\raggio,-\raggio-\mraggio) — (\raggio,\raggio+\mraggio+0.5);
          \node(OO)at(0,0) [label= below right:$O$] {};

          \foreach \x/\z /\y in {
          0/1/ T_1,
          40/2/T_2,
          140/3/T_3,
          180/4/T_4,
          210/5/T_5,
          340/6/T_6
          }
          \stampa{\z}{\x}{\y};
          \end{tikzpicture}

          \end{document}

          `

          ciao e grazie
          claudio

          Non mi pare che quel modo di scrivere sia il migliore per gestire tutti quegli annidamenti: ti perdi troppo facilmente. Io userei expl3; siccome c’è di mezzo TikZ con i suoi spazi nei nomi delle opzioni occorre fare in modo che gli spazi non siano ignorati.
          `\usepackage{xparse}
          \ExplSyntaxOn
          \NewDocumentCommand{\stampa}{mmm}
          {
          \claudio_stampa:nnn { #1 } { #2 } { #3 }
          }
          \group_begin:
          \char_set_catcode_space:n {`\ }% Qui gli spazi sono significativi! Ma siamo in una tikzpicture, quindi non c'è grande rischio di spazi spuri
          \cs_new:Npn \claudio_stampa:nnn#1#2#3%
          {
          \int_case:nnn { #1 }
          {
          {1}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};}
          {2}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};}
          {3}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};}
          {4}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};}
          {5}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below right] {$#3$};}
          {6}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};}
          }
          {}
          }
          \group_end:
          \ExplSyntaxOff`
          Si può anche ovviare al tutto definendo una versione “esterna” di [tt]\int_case:nnn[/tt]:
          `\ExplSyntaxOn
          \cs_set_eq:NN \IntCase \int_case:nnn
          \ExplSyntaxOff
          \NewDocumentCommand{\stampa}{mmm}{%
          {\IntCase{#1}
          {%
          {1}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above] {$#3$};}%
          {2}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above right] {$#3$};}%
          {3}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[above left] {$#3$};}%
          {4}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below] {$#3$};}%
          {5}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below right] {$#3$};}%
          {6}{\draw(0,0)–(\raggio,{\raggio*tan(#2)})node[below left] {$#3$};}%
          }
          {}%
          }`
          Nell’ultimo esempio ho messo più % di quelli che sarebbero necessari, ma solo per dare l’idea di dove andrebbero in una macro che non fosse da usare in [tt]tikzpicture[/tt]. Penso che converrai con me che [tt]\IntCase[/tt] è un po’ più maneggevole rispetto all’annidamento di [tt]\ifthenelse[/tt]. Nell’ultima coppia di graffe va il codice da eseguire se nessun caso va bene.

          Ciao
          Enrico

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

      Go to top