Bucle Tikz \foreach elemento en un conjunto A pero no en un conjunto B

Bucle Tikz \foreach elemento en un conjunto A pero no en un conjunto B

¿Alguien sabe cuál es el comando "no en el conjunto" en Ti?k¿Z? Lo que quiero es queAser un conjunto yBser un subconjunto deA. ¿Cuál es el comando en Ti?kZ para decir: “para cadaienApero no enB?

Necesito algo como:

foreach i in A
  if i is in the set B do THIS, else do THAT

Respuesta1

Enfoque de fuerza bruta.

\documentclass{article}
\usepackage{tikz}

\def\setA{1,2,3,4,5}
\def\setB{2,4}

\newif\ifmatch

\begin{document}

\let\setC=\empty
\foreach \x in \setA {\matchfalse
  \foreach \y in \setB {\ifnum\x=\y\relax \global\matchtrue \fi}%
  \ifmatch\else
    \ifx\empty\setC\relax
      \xdef\setC{\x}%
    \else
      \xdef\setC{\setC,\x}%
    \fi
  \fi}

\setC% should contain 1,3,5

\end{document}

Respuesta2

Podemos representar conjuntos (ordenados) como listas separadas por comas.

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\foreachnot}{mm+m+m}
 {% #1 = main list, #2 = exclusion list,
  % #3 = to do if item is in main list but not in the exclusion list
  % #4 = to do if item is in the main list and in the exclusion list
  \erdos_forachnot:nnnn { #1 } { #2 } { #3 } { #4 }
 }
\NewDocumentCommand{\definelist}{mm}
 {
  \clist_clear_new:c { l__erdos_list_#1_clist }
  \clist_set:cn { l__erdos_list_#1_clist } { #2 }
 }

\cs_new_protected:Nn \erdos_forachnot:nnnn
 {
  \cs_set_protected:Nn \__erdos_foreachnot_true:n { #3 }
  \cs_set_protected:Nn \__erdos_foreachnot_false:n { #4 }
  \clist_map_inline:cn { l__erdos_list_#1_clist }
   {
    \clist_if_in:cnTF { l__erdos_list_#2_clist } { ##1 }
     {% item is in main list and in the exclusion list
      \__erdos_foreachnot_false:n { ##1 }
     }
     {% item is in main list but not in the exclusion list
      \__erdos_foreachnot_true:n { ##1 }
     }
   }
 }

% initialize the two scratch functions
\cs_new_protected:Nn \__erdos_foreachnot_true:n {}
\cs_new_protected:Nn \__erdos_foreachnot_false:n {}

\ExplSyntaxOff

\begin{document}

\definelist{A}{1,2,3,4,5}
\definelist{B}{2,4}

\foreachnot{A}{B}{Item #1 is in A but not in B\par}{Item #1 is in A and in B\par}

\end{document}

Los argumentos tercero y cuarto son plantillas donde el elemento actual se indica con #1.

Se necesita más trabajo si es necesario anidar dichos bucles.

ingrese la descripción de la imagen aquí

información relacionada