5

I define 2 arrays r and p and draw them.

I would like now to compute the min of r and p in order to draw it in a similar way. The resulting array would be {0.2, 0.4, 0.8, 0.8, 0.4, 0.0, 0.1, 0.0, 0.1 ,0.5}, but I would like to compute it automatically.

Do you have any idea ?

Here is a MWE regardig the definition and the drawing of r and p :

\begin{tikzpicture}
  \def\r{{0.2}, {0.4}, {1.0}, {0.8}, {1.0}, {0.0}, {0.3}, {0.5}, {0.1}, {0.5}};
  \def\p{{0.9}, {0.5}, {0.8}, {0.8}, {0.4}, {0.3}, {0.1}, {0.0}, {0.8}, {0.7}};

  \filldraw (0, 0.2) node {$r$}
    \foreach \y [count=\x from 0] in \r { -- (\x, \y) circle[radius=1pt] };
  \filldraw (0, 0.9) node {$r$}
    \foreach \y [count=\x from 0] in \p { -- (\x, \y) circle[radius=1pt] };

\end{tikzpicture}
  • Welcome to TeX.SE. While code snippets are useful in explanations, it is always best to compose a fully compilable MWE that illustrates the problem including the \documentclass and the appropriate packages so that those trying to help don't have to recreate it. This is especially important for tikz as there are numerous libraries. While solving problems can be fun, setting them up is not. Then, those trying to help can simply cut and paste your MWE and get started on solving the problem. – Peter Grill Nov 7 '14 at 17:00
5

Basic idea is to iterate through the first list and locate the nth member of the second list and save the minimum into another list.

enter image description here

Notes:

References:

Code:

\documentclass{article}
\usepackage{tikz}

%% https://tex.stackexchange.com/questions/14393/how-keep-a-running-list-of-strings-and-then-process-them-one-at-a-time
\makeatletter
\newcommand*\@NewList{}%
\newcommand{\ApendToNewList}[1]{%
    %% https://tex.stackexchange.com/questions/83595/expansion-issue-when-adding-to-csv-list-from-within-a-foreach
    \begingroup\edef\TempValue{\endgroup%
        \noexpand\g@addto@macro\noexpand\@NewList{\ifx\@NewList\empty\else,\fi#1}}\TempValue%
}

\newcommand*{\ExtractNthValueOfList}[3]{%
    \foreach [count=\i from 1] \x in #3 {%
        \ifnum\i=#2\relax
            \xdef#1{\x}%
            \breakforeach%
         \fi
    }%
}

\newcommand*{\@NthValue}{xx}
\newcommand*{\ExtractMinList}[3]{
    % #1 = variable to contain extract list
    % #2 = first list
    % #3 = second list
    \foreach [count=\j from 1] \y in #2 {%
        \ExtractNthValueOfList{\@NthValue}{\j}{#3}%
        \pgfmathsetmacro{\MinValue}{min(\y,\@NthValue)}%
        \ApendToNewList{\MinValue}%
        \typeout{\j, \y, \@NthValue}% <--- Useful for debugging
    }%
    \edef#1{\@NewList}%
}
\makeatother


\newcommand\RList{{0.2}, {0.4}, {1.0}, {0.8}, {1.0}, {0.0}, {0.3}, {0.5}, {0.1}, {0.5}}
\newcommand\PList{{0.9}, {0.5}, {0.8}, {0.8}, {0.4}, {0.3}, {0.1}, {0.0}, {0.8}, {0.7}}
\newcommand\ExtractedMinList{}% Ensure that we are not overwriting an existing macro

\begin{document}
    \ExtractMinList{\ExtractedMinList}{\RList}{\PList}%
    Extracted List=\ExtractedMinList
\end{document}
  • Thank you very much ! Moreover, the ExtractNthValueOfList allows me to extract the first value for the \filldraw loop. – Gim Nov 8 '14 at 10:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.