Expand `ifthenelse` immediately












6















Consider this script:



documentclass{report}
usepackage{ifthen}
newcommand{thesissize}{SHORT}
begin{document}
setcounter{page}{
%3
ifthenelse{
equal{thesissize}{SHORT}
}{3}{2}
}
hey
end{document}


Compiling this script gives the error:



! Missing number, treated as zero.


I suspect that this is due to ifthenelse not being evaluated at the time of executing setcounter. How do I solve this?










share|improve this question





























    6















    Consider this script:



    documentclass{report}
    usepackage{ifthen}
    newcommand{thesissize}{SHORT}
    begin{document}
    setcounter{page}{
    %3
    ifthenelse{
    equal{thesissize}{SHORT}
    }{3}{2}
    }
    hey
    end{document}


    Compiling this script gives the error:



    ! Missing number, treated as zero.


    I suspect that this is due to ifthenelse not being evaluated at the time of executing setcounter. How do I solve this?










    share|improve this question



























      6












      6








      6








      Consider this script:



      documentclass{report}
      usepackage{ifthen}
      newcommand{thesissize}{SHORT}
      begin{document}
      setcounter{page}{
      %3
      ifthenelse{
      equal{thesissize}{SHORT}
      }{3}{2}
      }
      hey
      end{document}


      Compiling this script gives the error:



      ! Missing number, treated as zero.


      I suspect that this is due to ifthenelse not being evaluated at the time of executing setcounter. How do I solve this?










      share|improve this question
















      Consider this script:



      documentclass{report}
      usepackage{ifthen}
      newcommand{thesissize}{SHORT}
      begin{document}
      setcounter{page}{
      %3
      ifthenelse{
      equal{thesissize}{SHORT}
      }{3}{2}
      }
      hey
      end{document}


      Compiling this script gives the error:



      ! Missing number, treated as zero.


      I suspect that this is due to ifthenelse not being evaluated at the time of executing setcounter. How do I solve this?







      macros ifthenelse






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 6 at 0:15









      Peter Mortensen

      55237




      55237










      asked Apr 5 at 13:10









      ViestursViesturs

      2,00641327




      2,00641327






















          3 Answers
          3






          active

          oldest

          votes


















          7














          you can't use ifthenelse inside setcounter. Change the order:



          documentclass{report}
          usepackage{ifthen}
          newcommand{thesissize}{SHORT}
          begin{document}
          ifthenelse{equal{thesissize}{SHORT}}
          {setcounter{page}{3}}{setcounter{page}{2}}


          hey
          end{document}


          Expandable tests are possible with expl3 and etoolbox. For both you should store the reference text in a command:



          documentclass{report}
          usepackage{expl3,etoolbox}
          newcommand{thesissize}{SHORT}
          newcommand{shortsize}{SHORT}

          begin{document}
          ExplSyntaxOn
          setcounter{page}{tl_if_eq:NNTFthesissizeshortsize{3}{2}}
          ExplSyntaxOff

          setcounter{page}{ifdefequal{thesissize}{shortsize}{3}{2}}

          hey
          end{document}





          share|improve this answer


























          • What is the reason?

            – Viesturs
            Apr 5 at 13:23






          • 6





            ifthenelse is not expandable.

            – Ulrike Fischer
            Apr 5 at 13:26






          • 1





            I added two more versions.

            – Ulrike Fischer
            Apr 5 at 13:52



















          2














          Another version of a string comparison using the pdfTeX macro pdfstrcmp. The following uses the pdftexcmds package to make it available to all engines under the same name:



          documentclass{article}

          usepackage{pdftexcmds}
          makeatletter
          newcommandifstreq[2]
          {%
          ifnumpdf@strcmp{#1}{#2}=0
          }
          makeatother

          newcommandthesissize{SHORT}

          begin{document}
          setcounter{page}{ifstreq{thesissize}{SHORT}3else2fi}
          hey
          end{document}


          If a LaTeX syntax is preferred one can use



          documentclass{article}

          usepackage{pdftexcmds}
          makeatletter
          newcommandifstreq[2]
          {%
          ifnumpdf@strcmp{#1}{#2}=0
          expandafter@secondofthree
          fi
          @secondoftwo
          }
          providecommand@secondofthree[3]{#2}
          makeatother

          newcommandthesissize{SHORT}

          begin{document}
          setcounter{page}{ifstreq{thesissize}{SHORT}{3}{2}}
          hey
          end{document}





          share|improve this answer

































            1














            No packages.



            documentclass{report}
            newcommand{thesissize}{SHORT}
            begin{document}

            newcommandtmp{SHORT}
            ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

            thepage

            renewcommandtmp{NOT SHORT}
            ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

            thepage
            end{document}


            enter image description here



            The expandable version:



            documentclass{report}
            newcommand{thesissize}{SHORT}
            begin{document}

            newcommandtmp{SHORT}
            setcounter{page}{ifxtmpthesissize3else2fi}

            thepage

            renewcommandtmp{NOT SHORT}
            setcounter{page}{ifxtmpthesissize3else2fi}

            thepage
            end{document}





            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%2f483347%2fexpand-ifthenelse-immediately%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              7














              you can't use ifthenelse inside setcounter. Change the order:



              documentclass{report}
              usepackage{ifthen}
              newcommand{thesissize}{SHORT}
              begin{document}
              ifthenelse{equal{thesissize}{SHORT}}
              {setcounter{page}{3}}{setcounter{page}{2}}


              hey
              end{document}


              Expandable tests are possible with expl3 and etoolbox. For both you should store the reference text in a command:



              documentclass{report}
              usepackage{expl3,etoolbox}
              newcommand{thesissize}{SHORT}
              newcommand{shortsize}{SHORT}

              begin{document}
              ExplSyntaxOn
              setcounter{page}{tl_if_eq:NNTFthesissizeshortsize{3}{2}}
              ExplSyntaxOff

              setcounter{page}{ifdefequal{thesissize}{shortsize}{3}{2}}

              hey
              end{document}





              share|improve this answer


























              • What is the reason?

                – Viesturs
                Apr 5 at 13:23






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                Apr 5 at 13:26






              • 1





                I added two more versions.

                – Ulrike Fischer
                Apr 5 at 13:52
















              7














              you can't use ifthenelse inside setcounter. Change the order:



              documentclass{report}
              usepackage{ifthen}
              newcommand{thesissize}{SHORT}
              begin{document}
              ifthenelse{equal{thesissize}{SHORT}}
              {setcounter{page}{3}}{setcounter{page}{2}}


              hey
              end{document}


              Expandable tests are possible with expl3 and etoolbox. For both you should store the reference text in a command:



              documentclass{report}
              usepackage{expl3,etoolbox}
              newcommand{thesissize}{SHORT}
              newcommand{shortsize}{SHORT}

              begin{document}
              ExplSyntaxOn
              setcounter{page}{tl_if_eq:NNTFthesissizeshortsize{3}{2}}
              ExplSyntaxOff

              setcounter{page}{ifdefequal{thesissize}{shortsize}{3}{2}}

              hey
              end{document}





              share|improve this answer


























              • What is the reason?

                – Viesturs
                Apr 5 at 13:23






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                Apr 5 at 13:26






              • 1





                I added two more versions.

                – Ulrike Fischer
                Apr 5 at 13:52














              7












              7








              7







              you can't use ifthenelse inside setcounter. Change the order:



              documentclass{report}
              usepackage{ifthen}
              newcommand{thesissize}{SHORT}
              begin{document}
              ifthenelse{equal{thesissize}{SHORT}}
              {setcounter{page}{3}}{setcounter{page}{2}}


              hey
              end{document}


              Expandable tests are possible with expl3 and etoolbox. For both you should store the reference text in a command:



              documentclass{report}
              usepackage{expl3,etoolbox}
              newcommand{thesissize}{SHORT}
              newcommand{shortsize}{SHORT}

              begin{document}
              ExplSyntaxOn
              setcounter{page}{tl_if_eq:NNTFthesissizeshortsize{3}{2}}
              ExplSyntaxOff

              setcounter{page}{ifdefequal{thesissize}{shortsize}{3}{2}}

              hey
              end{document}





              share|improve this answer















              you can't use ifthenelse inside setcounter. Change the order:



              documentclass{report}
              usepackage{ifthen}
              newcommand{thesissize}{SHORT}
              begin{document}
              ifthenelse{equal{thesissize}{SHORT}}
              {setcounter{page}{3}}{setcounter{page}{2}}


              hey
              end{document}


              Expandable tests are possible with expl3 and etoolbox. For both you should store the reference text in a command:



              documentclass{report}
              usepackage{expl3,etoolbox}
              newcommand{thesissize}{SHORT}
              newcommand{shortsize}{SHORT}

              begin{document}
              ExplSyntaxOn
              setcounter{page}{tl_if_eq:NNTFthesissizeshortsize{3}{2}}
              ExplSyntaxOff

              setcounter{page}{ifdefequal{thesissize}{shortsize}{3}{2}}

              hey
              end{document}






              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Apr 5 at 14:09









              Andrew Swann

              78.3k9135334




              78.3k9135334










              answered Apr 5 at 13:22









              Ulrike FischerUlrike Fischer

              200k9306693




              200k9306693













              • What is the reason?

                – Viesturs
                Apr 5 at 13:23






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                Apr 5 at 13:26






              • 1





                I added two more versions.

                – Ulrike Fischer
                Apr 5 at 13:52



















              • What is the reason?

                – Viesturs
                Apr 5 at 13:23






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                Apr 5 at 13:26






              • 1





                I added two more versions.

                – Ulrike Fischer
                Apr 5 at 13:52

















              What is the reason?

              – Viesturs
              Apr 5 at 13:23





              What is the reason?

              – Viesturs
              Apr 5 at 13:23




              6




              6





              ifthenelse is not expandable.

              – Ulrike Fischer
              Apr 5 at 13:26





              ifthenelse is not expandable.

              – Ulrike Fischer
              Apr 5 at 13:26




              1




              1





              I added two more versions.

              – Ulrike Fischer
              Apr 5 at 13:52





              I added two more versions.

              – Ulrike Fischer
              Apr 5 at 13:52











              2














              Another version of a string comparison using the pdfTeX macro pdfstrcmp. The following uses the pdftexcmds package to make it available to all engines under the same name:



              documentclass{article}

              usepackage{pdftexcmds}
              makeatletter
              newcommandifstreq[2]
              {%
              ifnumpdf@strcmp{#1}{#2}=0
              }
              makeatother

              newcommandthesissize{SHORT}

              begin{document}
              setcounter{page}{ifstreq{thesissize}{SHORT}3else2fi}
              hey
              end{document}


              If a LaTeX syntax is preferred one can use



              documentclass{article}

              usepackage{pdftexcmds}
              makeatletter
              newcommandifstreq[2]
              {%
              ifnumpdf@strcmp{#1}{#2}=0
              expandafter@secondofthree
              fi
              @secondoftwo
              }
              providecommand@secondofthree[3]{#2}
              makeatother

              newcommandthesissize{SHORT}

              begin{document}
              setcounter{page}{ifstreq{thesissize}{SHORT}{3}{2}}
              hey
              end{document}





              share|improve this answer






























                2














                Another version of a string comparison using the pdfTeX macro pdfstrcmp. The following uses the pdftexcmds package to make it available to all engines under the same name:



                documentclass{article}

                usepackage{pdftexcmds}
                makeatletter
                newcommandifstreq[2]
                {%
                ifnumpdf@strcmp{#1}{#2}=0
                }
                makeatother

                newcommandthesissize{SHORT}

                begin{document}
                setcounter{page}{ifstreq{thesissize}{SHORT}3else2fi}
                hey
                end{document}


                If a LaTeX syntax is preferred one can use



                documentclass{article}

                usepackage{pdftexcmds}
                makeatletter
                newcommandifstreq[2]
                {%
                ifnumpdf@strcmp{#1}{#2}=0
                expandafter@secondofthree
                fi
                @secondoftwo
                }
                providecommand@secondofthree[3]{#2}
                makeatother

                newcommandthesissize{SHORT}

                begin{document}
                setcounter{page}{ifstreq{thesissize}{SHORT}{3}{2}}
                hey
                end{document}





                share|improve this answer




























                  2












                  2








                  2







                  Another version of a string comparison using the pdfTeX macro pdfstrcmp. The following uses the pdftexcmds package to make it available to all engines under the same name:



                  documentclass{article}

                  usepackage{pdftexcmds}
                  makeatletter
                  newcommandifstreq[2]
                  {%
                  ifnumpdf@strcmp{#1}{#2}=0
                  }
                  makeatother

                  newcommandthesissize{SHORT}

                  begin{document}
                  setcounter{page}{ifstreq{thesissize}{SHORT}3else2fi}
                  hey
                  end{document}


                  If a LaTeX syntax is preferred one can use



                  documentclass{article}

                  usepackage{pdftexcmds}
                  makeatletter
                  newcommandifstreq[2]
                  {%
                  ifnumpdf@strcmp{#1}{#2}=0
                  expandafter@secondofthree
                  fi
                  @secondoftwo
                  }
                  providecommand@secondofthree[3]{#2}
                  makeatother

                  newcommandthesissize{SHORT}

                  begin{document}
                  setcounter{page}{ifstreq{thesissize}{SHORT}{3}{2}}
                  hey
                  end{document}





                  share|improve this answer















                  Another version of a string comparison using the pdfTeX macro pdfstrcmp. The following uses the pdftexcmds package to make it available to all engines under the same name:



                  documentclass{article}

                  usepackage{pdftexcmds}
                  makeatletter
                  newcommandifstreq[2]
                  {%
                  ifnumpdf@strcmp{#1}{#2}=0
                  }
                  makeatother

                  newcommandthesissize{SHORT}

                  begin{document}
                  setcounter{page}{ifstreq{thesissize}{SHORT}3else2fi}
                  hey
                  end{document}


                  If a LaTeX syntax is preferred one can use



                  documentclass{article}

                  usepackage{pdftexcmds}
                  makeatletter
                  newcommandifstreq[2]
                  {%
                  ifnumpdf@strcmp{#1}{#2}=0
                  expandafter@secondofthree
                  fi
                  @secondoftwo
                  }
                  providecommand@secondofthree[3]{#2}
                  makeatother

                  newcommandthesissize{SHORT}

                  begin{document}
                  setcounter{page}{ifstreq{thesissize}{SHORT}{3}{2}}
                  hey
                  end{document}






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Apr 6 at 15:25

























                  answered Apr 5 at 18:12









                  SkillmonSkillmon

                  24.4k12250




                  24.4k12250























                      1














                      No packages.



                      documentclass{report}
                      newcommand{thesissize}{SHORT}
                      begin{document}

                      newcommandtmp{SHORT}
                      ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                      thepage

                      renewcommandtmp{NOT SHORT}
                      ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                      thepage
                      end{document}


                      enter image description here



                      The expandable version:



                      documentclass{report}
                      newcommand{thesissize}{SHORT}
                      begin{document}

                      newcommandtmp{SHORT}
                      setcounter{page}{ifxtmpthesissize3else2fi}

                      thepage

                      renewcommandtmp{NOT SHORT}
                      setcounter{page}{ifxtmpthesissize3else2fi}

                      thepage
                      end{document}





                      share|improve this answer






























                        1














                        No packages.



                        documentclass{report}
                        newcommand{thesissize}{SHORT}
                        begin{document}

                        newcommandtmp{SHORT}
                        ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                        thepage

                        renewcommandtmp{NOT SHORT}
                        ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                        thepage
                        end{document}


                        enter image description here



                        The expandable version:



                        documentclass{report}
                        newcommand{thesissize}{SHORT}
                        begin{document}

                        newcommandtmp{SHORT}
                        setcounter{page}{ifxtmpthesissize3else2fi}

                        thepage

                        renewcommandtmp{NOT SHORT}
                        setcounter{page}{ifxtmpthesissize3else2fi}

                        thepage
                        end{document}





                        share|improve this answer




























                          1












                          1








                          1







                          No packages.



                          documentclass{report}
                          newcommand{thesissize}{SHORT}
                          begin{document}

                          newcommandtmp{SHORT}
                          ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                          thepage

                          renewcommandtmp{NOT SHORT}
                          ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                          thepage
                          end{document}


                          enter image description here



                          The expandable version:



                          documentclass{report}
                          newcommand{thesissize}{SHORT}
                          begin{document}

                          newcommandtmp{SHORT}
                          setcounter{page}{ifxtmpthesissize3else2fi}

                          thepage

                          renewcommandtmp{NOT SHORT}
                          setcounter{page}{ifxtmpthesissize3else2fi}

                          thepage
                          end{document}





                          share|improve this answer















                          No packages.



                          documentclass{report}
                          newcommand{thesissize}{SHORT}
                          begin{document}

                          newcommandtmp{SHORT}
                          ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                          thepage

                          renewcommandtmp{NOT SHORT}
                          ifxtmpthesissizerelaxsetcounter{page}{3}elsesetcounter{page}{2}fi

                          thepage
                          end{document}


                          enter image description here



                          The expandable version:



                          documentclass{report}
                          newcommand{thesissize}{SHORT}
                          begin{document}

                          newcommandtmp{SHORT}
                          setcounter{page}{ifxtmpthesissize3else2fi}

                          thepage

                          renewcommandtmp{NOT SHORT}
                          setcounter{page}{ifxtmpthesissize3else2fi}

                          thepage
                          end{document}






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Apr 6 at 0:55

























                          answered Apr 6 at 0:47









                          Steven B. SegletesSteven B. Segletes

                          163k9207419




                          163k9207419






























                              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.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f483347%2fexpand-ifthenelse-immediately%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