Re: if then multipli

#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

Go to top