What is wrong with the use of `isodd` of `xifthen`?












1














The white/black board can be drawn by testing the parity of node positions as follows:



white-black-board



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
pgfmathparse{mod(r + c, 2)}
letparitypgfmathresult

ifthenelse{equal{parity}{0.0}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}


However, using isodd of xifthen does not produce the same result. What is wrong here? Or are there any alternative similar solutions?



white-black-board-wrong



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
ifthenelse{NOT isodd{r + c}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}









share|improve this question




















  • 2




    Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
    – Werner
    4 hours ago










  • @Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
    – hengxin
    4 hours ago
















1














The white/black board can be drawn by testing the parity of node positions as follows:



white-black-board



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
pgfmathparse{mod(r + c, 2)}
letparitypgfmathresult

ifthenelse{equal{parity}{0.0}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}


However, using isodd of xifthen does not produce the same result. What is wrong here? Or are there any alternative similar solutions?



white-black-board-wrong



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
ifthenelse{NOT isodd{r + c}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}









share|improve this question




















  • 2




    Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
    – Werner
    4 hours ago










  • @Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
    – hengxin
    4 hours ago














1












1








1







The white/black board can be drawn by testing the parity of node positions as follows:



white-black-board



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
pgfmathparse{mod(r + c, 2)}
letparitypgfmathresult

ifthenelse{equal{parity}{0.0}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}


However, using isodd of xifthen does not produce the same result. What is wrong here? Or are there any alternative similar solutions?



white-black-board-wrong



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
ifthenelse{NOT isodd{r + c}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}









share|improve this question















The white/black board can be drawn by testing the parity of node positions as follows:



white-black-board



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
pgfmathparse{mod(r + c, 2)}
letparitypgfmathresult

ifthenelse{equal{parity}{0.0}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}


However, using isodd of xifthen does not produce the same result. What is wrong here? Or are there any alternative similar solutions?



white-black-board-wrong



documentclass[tikz]{standalone}
usepackage{xifthen}

begin{document}
begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
ifthenelse{NOT isodd{r + c}}
{node (rc) [fill = lightgray] at (c, r){}}
{node (rc) at (c, r){}};
}
}
end{tikzpicture}
end{document}






nodes foreach xifthen arithmetic






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 4 hours ago









Werner

436k639571647




436k639571647










asked 4 hours ago









hengxin

9572825




9572825








  • 2




    Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
    – Werner
    4 hours ago










  • @Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
    – hengxin
    4 hours ago














  • 2




    Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
    – Werner
    4 hours ago










  • @Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
    – hengxin
    4 hours ago








2




2




Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
– Werner
4 hours ago




Can I suggest using TeX's ifodd instead of ifthenelse from xifthen? See Why is the ifthen package obsolete?
– Werner
4 hours ago












@Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
– hengxin
4 hours ago




@Werner Thanks. It is also appreciated. Would you mind posting it as an answer?
– hengxin
4 hours ago










2 Answers
2






active

oldest

votes


















2














I'd suggest using TeX's ifodd (or etoolbox); xifthen-and-friends may be considered obsolete:



enter image description here



documentclass{article}

usepackage{xfp,tikz}

begin{document}

begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
foreach r in {1, ..., 4} {
foreach c in {1, ..., 5} {
ifoddinteval{r+c}
node (rc) [fill = lightgray] at (c, r) {};
else
node (rc) at (c, r) {};
fi
}
}
end{tikzpicture}

end{document}


I use xfp since it is convenient and provides an expandable inteval for integer evaluation that can be used in conditioning options like ifodd. You can also do it without xfp:



      ifoddnumexprr+crelax
%...





share|improve this answer





























    1














    You are implicitly assuming that isodd does calculations. But this is not what happens, it actually simply takes the begin of the argument until it hits something that is no longer a number. So you would need to do the addition first and then fed the result to isodd. Or use the tools of pgf:



    documentclass{article}
    usepackage{tikz}
    usepackage{xifthen}

    begin{document}
    ifthenelse{isodd{124blub}}{odd}{even}

    ifthenelse{isodd{123blub}}{odd}{even}

    ifthenelse{isodd{2+3}}{odd}{even}

    ifthenelse{isodd{3+2}}{odd}{even}

    bigskip
    begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
    foreach r in {1, ..., 4} {
    foreach c in {1, ..., 5} {
    pgfmathsetmacromycolor{isodd{numexprr+c}?"lightgray":"white"}
    node (rc) [fill =mycolor ] at (c, r){};
    }
    }
    end{tikzpicture}
    end{document}


    enter image description here






    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "85"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467485%2fwhat-is-wrong-with-the-use-of-isodd-of-xifthen%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2














      I'd suggest using TeX's ifodd (or etoolbox); xifthen-and-friends may be considered obsolete:



      enter image description here



      documentclass{article}

      usepackage{xfp,tikz}

      begin{document}

      begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
      foreach r in {1, ..., 4} {
      foreach c in {1, ..., 5} {
      ifoddinteval{r+c}
      node (rc) [fill = lightgray] at (c, r) {};
      else
      node (rc) at (c, r) {};
      fi
      }
      }
      end{tikzpicture}

      end{document}


      I use xfp since it is convenient and provides an expandable inteval for integer evaluation that can be used in conditioning options like ifodd. You can also do it without xfp:



            ifoddnumexprr+crelax
      %...





      share|improve this answer


























        2














        I'd suggest using TeX's ifodd (or etoolbox); xifthen-and-friends may be considered obsolete:



        enter image description here



        documentclass{article}

        usepackage{xfp,tikz}

        begin{document}

        begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
        foreach r in {1, ..., 4} {
        foreach c in {1, ..., 5} {
        ifoddinteval{r+c}
        node (rc) [fill = lightgray] at (c, r) {};
        else
        node (rc) at (c, r) {};
        fi
        }
        }
        end{tikzpicture}

        end{document}


        I use xfp since it is convenient and provides an expandable inteval for integer evaluation that can be used in conditioning options like ifodd. You can also do it without xfp:



              ifoddnumexprr+crelax
        %...





        share|improve this answer
























          2












          2








          2






          I'd suggest using TeX's ifodd (or etoolbox); xifthen-and-friends may be considered obsolete:



          enter image description here



          documentclass{article}

          usepackage{xfp,tikz}

          begin{document}

          begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
          foreach r in {1, ..., 4} {
          foreach c in {1, ..., 5} {
          ifoddinteval{r+c}
          node (rc) [fill = lightgray] at (c, r) {};
          else
          node (rc) at (c, r) {};
          fi
          }
          }
          end{tikzpicture}

          end{document}


          I use xfp since it is convenient and provides an expandable inteval for integer evaluation that can be used in conditioning options like ifodd. You can also do it without xfp:



                ifoddnumexprr+crelax
          %...





          share|improve this answer












          I'd suggest using TeX's ifodd (or etoolbox); xifthen-and-friends may be considered obsolete:



          enter image description here



          documentclass{article}

          usepackage{xfp,tikz}

          begin{document}

          begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
          foreach r in {1, ..., 4} {
          foreach c in {1, ..., 5} {
          ifoddinteval{r+c}
          node (rc) [fill = lightgray] at (c, r) {};
          else
          node (rc) at (c, r) {};
          fi
          }
          }
          end{tikzpicture}

          end{document}


          I use xfp since it is convenient and provides an expandable inteval for integer evaluation that can be used in conditioning options like ifodd. You can also do it without xfp:



                ifoddnumexprr+crelax
          %...






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 4 hours ago









          Werner

          436k639571647




          436k639571647























              1














              You are implicitly assuming that isodd does calculations. But this is not what happens, it actually simply takes the begin of the argument until it hits something that is no longer a number. So you would need to do the addition first and then fed the result to isodd. Or use the tools of pgf:



              documentclass{article}
              usepackage{tikz}
              usepackage{xifthen}

              begin{document}
              ifthenelse{isodd{124blub}}{odd}{even}

              ifthenelse{isodd{123blub}}{odd}{even}

              ifthenelse{isodd{2+3}}{odd}{even}

              ifthenelse{isodd{3+2}}{odd}{even}

              bigskip
              begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
              foreach r in {1, ..., 4} {
              foreach c in {1, ..., 5} {
              pgfmathsetmacromycolor{isodd{numexprr+c}?"lightgray":"white"}
              node (rc) [fill =mycolor ] at (c, r){};
              }
              }
              end{tikzpicture}
              end{document}


              enter image description here






              share|improve this answer


























                1














                You are implicitly assuming that isodd does calculations. But this is not what happens, it actually simply takes the begin of the argument until it hits something that is no longer a number. So you would need to do the addition first and then fed the result to isodd. Or use the tools of pgf:



                documentclass{article}
                usepackage{tikz}
                usepackage{xifthen}

                begin{document}
                ifthenelse{isodd{124blub}}{odd}{even}

                ifthenelse{isodd{123blub}}{odd}{even}

                ifthenelse{isodd{2+3}}{odd}{even}

                ifthenelse{isodd{3+2}}{odd}{even}

                bigskip
                begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
                foreach r in {1, ..., 4} {
                foreach c in {1, ..., 5} {
                pgfmathsetmacromycolor{isodd{numexprr+c}?"lightgray":"white"}
                node (rc) [fill =mycolor ] at (c, r){};
                }
                }
                end{tikzpicture}
                end{document}


                enter image description here






                share|improve this answer
























                  1












                  1








                  1






                  You are implicitly assuming that isodd does calculations. But this is not what happens, it actually simply takes the begin of the argument until it hits something that is no longer a number. So you would need to do the addition first and then fed the result to isodd. Or use the tools of pgf:



                  documentclass{article}
                  usepackage{tikz}
                  usepackage{xifthen}

                  begin{document}
                  ifthenelse{isodd{124blub}}{odd}{even}

                  ifthenelse{isodd{123blub}}{odd}{even}

                  ifthenelse{isodd{2+3}}{odd}{even}

                  ifthenelse{isodd{3+2}}{odd}{even}

                  bigskip
                  begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
                  foreach r in {1, ..., 4} {
                  foreach c in {1, ..., 5} {
                  pgfmathsetmacromycolor{isodd{numexprr+c}?"lightgray":"white"}
                  node (rc) [fill =mycolor ] at (c, r){};
                  }
                  }
                  end{tikzpicture}
                  end{document}


                  enter image description here






                  share|improve this answer












                  You are implicitly assuming that isodd does calculations. But this is not what happens, it actually simply takes the begin of the argument until it hits something that is no longer a number. So you would need to do the addition first and then fed the result to isodd. Or use the tools of pgf:



                  documentclass{article}
                  usepackage{tikz}
                  usepackage{xifthen}

                  begin{document}
                  ifthenelse{isodd{124blub}}{odd}{even}

                  ifthenelse{isodd{123blub}}{odd}{even}

                  ifthenelse{isodd{2+3}}{odd}{even}

                  ifthenelse{isodd{3+2}}{odd}{even}

                  bigskip
                  begin{tikzpicture}[every node/.style = {draw, circle, minimum size = 10pt}]
                  foreach r in {1, ..., 4} {
                  foreach c in {1, ..., 5} {
                  pgfmathsetmacromycolor{isodd{numexprr+c}?"lightgray":"white"}
                  node (rc) [fill =mycolor ] at (c, r){};
                  }
                  }
                  end{tikzpicture}
                  end{document}


                  enter image description here







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 30 mins ago









                  Ulrike Fischer

                  185k7289668




                  185k7289668






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467485%2fwhat-is-wrong-with-the-use-of-isodd-of-xifthen%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Михайлов, Христо

                      Гороховецкий артиллерийский полигон

                      Центральная группа войск