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 5 hours ago









      Peter Mortensen

      54637




      54637










      asked 16 hours ago









      ViestursViesturs

      1,93141227




      1,93141227






















          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
            16 hours ago






          • 6





            ifthenelse is not expandable.

            – Ulrike Fischer
            15 hours ago






          • 1





            I added two more versions.

            – Ulrike Fischer
            15 hours ago



















          1














          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}





          share|improve this answer































            0














            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
                16 hours ago






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                15 hours ago






              • 1





                I added two more versions.

                – Ulrike Fischer
                15 hours ago
















              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
                16 hours ago






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                15 hours ago






              • 1





                I added two more versions.

                – Ulrike Fischer
                15 hours ago














              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 15 hours ago









              Andrew Swann

              78k9132332




              78k9132332










              answered 16 hours ago









              Ulrike FischerUlrike Fischer

              198k9305692




              198k9305692













              • What is the reason?

                – Viesturs
                16 hours ago






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                15 hours ago






              • 1





                I added two more versions.

                – Ulrike Fischer
                15 hours ago



















              • What is the reason?

                – Viesturs
                16 hours ago






              • 6





                ifthenelse is not expandable.

                – Ulrike Fischer
                15 hours ago






              • 1





                I added two more versions.

                – Ulrike Fischer
                15 hours ago

















              What is the reason?

              – Viesturs
              16 hours ago





              What is the reason?

              – Viesturs
              16 hours ago




              6




              6





              ifthenelse is not expandable.

              – Ulrike Fischer
              15 hours ago





              ifthenelse is not expandable.

              – Ulrike Fischer
              15 hours ago




              1




              1





              I added two more versions.

              – Ulrike Fischer
              15 hours ago





              I added two more versions.

              – Ulrike Fischer
              15 hours ago











              1














              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}





              share|improve this answer




























                1














                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}





                share|improve this answer


























                  1












                  1








                  1







                  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}





                  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}






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 11 hours ago









                  SkillmonSkillmon

                  24.2k12250




                  24.2k12250























                      0














                      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






























                        0














                        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




























                          0












                          0








                          0







                          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 4 hours ago

























                          answered 4 hours ago









                          Steven B. SegletesSteven B. Segletes

                          161k9205416




                          161k9205416






























                              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







                              Popular posts from this blog

                              What other Star Trek series did the main TNG cast show up in?

                              Berlina muro

                              Berlina aerponto