Comportamento liste/macro \foreach in tikz

  • Creatore
    Topic
  • #119816
    mattiaca
    Partecipante
      Up
      0
      Down
      ::


      Sto provando a creare delle macro con Tikz, ma è da diversi giorni che sono arenato su un problema con \foreach.
      In particolare voglio creare una lista contenuta in una macro, che a sua volta deve espandersi in una seconda macro-lista diversa, se non viene altrimenti specificato il valore della prima macro-lista. Il problema è che se la seconda macro-lista contiene valori separati da virgole, la compilazione va in errore. 😕
      Allego un EMC per maggiore chiarezza:
      `
      \documentclass[11pt]{standalone}
      \usepackage{tikz}
      \usetikzlibrary{calc}

      \begin{document}
      \begin{tikzpicture}[
      posizione tacche/.store in=\posizionetacche,%
      posizione tacche=\valoredefault,%
      ]
      % FUNZIONA
      \def\valoredefault{-1}
      \foreach \y in \posizionetacche \node[circle,draw] at ($(0,0)!\y!(0,10)$) {};

      % QUESTO COMMENTATO NON FUNZIONA
      %\def\valoredefault{-1,+1}
      %\foreach \y in \posizionetacche \node[circle,draw] at ($(0,0)!\y!(0,10)$) {};

      % FUNZIONA
      \begin{scope}[posizione tacche={-10,-9,…,10}]
      \foreach \y in \posizionetacche \node[circle,draw] at ($(0,0)!\y!(0,10)$) {};
      \end{scope}
      \end{tikzpicture}
      \end{document}
      `

      Attendo con ansia la risposta di qualche guru! 😉

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #119817
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao.
          Intanto così funziona:
          `
          \begin{scope}[posizione tacche={-1,+1}],
          \foreach \y in \posizionetacche \node[circle,draw] at ($(0,0)!\y!(0,10)$) {\y};
          \end{scope}
          `

          Ma funziona più semplicemente anche così:
          `\begin{scope}[posizione tacche={-1,+1}],
          \foreach \y in \posizionetacche
          \node[circle,draw] at (0, \y*10) {\y};
          \end{scope}`

          Ma anche così:
          `\tikzset{posizione tacche={-1,+1}}
          \foreach \y in \posizionetacche
          \node[circle,draw] at (0, 10*\y) {\y};`

          🙂 ho messo \y come contenuto del nodo per maggiore chiarezza.

          Alla prossima
          R.

        • #119818
          mattiaca
          Partecipante
            Up
            0
            Down
            ::


            Alla fine ho trovato una soluzione “brutale” (perché mi sembra poco elegante), che però funziona.
            La posto a vantaggio di tutti (oltre che per stimolare soluzioni più eleganti).

            `
            \documentclass{standalone}
            \usepackage{tikz}

            \begin{document}
            \begin{tikzpicture}[%
            posizione tacche/.store in=\posizionetacche,%
            valore default/.store in=\valoredefault,%
            valore default={-1,+1},%
            %posizione tacche={+2,-2},%
            ]
            \ifcsname posizionetacche\endcsname \else \let\posizionetacche\valoredefault \fi
            \foreach \y in \posizionetacche \node[circle,draw] at (0,\y) {\y};
            \end{tikzpicture}
            \end{document}
            `

        Visualizzazione 1 filone di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top