how do I test for a unique string with multiple possibilities?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{
margin-bottom:0;
}








3

















I'm writing a macro that takes a string and it returns an href based on that string. The string could have 150 different values. My question is how to write this in an efficient way. Using pdflatex.



Here's what I've got right now, shortened to two conditions for explanation:



documentclass{article}
usepackage{hyperref}
newcommand{myref}[1]{%
ifnumpdfstrcmp{#1}{aaa}=0%
href{example.com/aaa}{my aaa link}
fi
ifnumpdfstrcmp{#1}{bbb}=0%
href{example.com/bbb}{my bbb link}
fi
}
begin{document}
Here is myref{aaa}.
end{document}


But of course once I get a success (#1=aaa, say), I'm still testing the other 149 conditions for no reason. How to code this efficiently?










share|improve this question



























  • Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

    – Joseph Wright
    May 28 at 13:13











  • Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

    – Tim A
    May 28 at 13:16


















3

















I'm writing a macro that takes a string and it returns an href based on that string. The string could have 150 different values. My question is how to write this in an efficient way. Using pdflatex.



Here's what I've got right now, shortened to two conditions for explanation:



documentclass{article}
usepackage{hyperref}
newcommand{myref}[1]{%
ifnumpdfstrcmp{#1}{aaa}=0%
href{example.com/aaa}{my aaa link}
fi
ifnumpdfstrcmp{#1}{bbb}=0%
href{example.com/bbb}{my bbb link}
fi
}
begin{document}
Here is myref{aaa}.
end{document}


But of course once I get a success (#1=aaa, say), I'm still testing the other 149 conditions for no reason. How to code this efficiently?










share|improve this question



























  • Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

    – Joseph Wright
    May 28 at 13:13











  • Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

    – Tim A
    May 28 at 13:16














3












3








3


1






I'm writing a macro that takes a string and it returns an href based on that string. The string could have 150 different values. My question is how to write this in an efficient way. Using pdflatex.



Here's what I've got right now, shortened to two conditions for explanation:



documentclass{article}
usepackage{hyperref}
newcommand{myref}[1]{%
ifnumpdfstrcmp{#1}{aaa}=0%
href{example.com/aaa}{my aaa link}
fi
ifnumpdfstrcmp{#1}{bbb}=0%
href{example.com/bbb}{my bbb link}
fi
}
begin{document}
Here is myref{aaa}.
end{document}


But of course once I get a success (#1=aaa, say), I'm still testing the other 149 conditions for no reason. How to code this efficiently?










share|improve this question















I'm writing a macro that takes a string and it returns an href based on that string. The string could have 150 different values. My question is how to write this in an efficient way. Using pdflatex.



Here's what I've got right now, shortened to two conditions for explanation:



documentclass{article}
usepackage{hyperref}
newcommand{myref}[1]{%
ifnumpdfstrcmp{#1}{aaa}=0%
href{example.com/aaa}{my aaa link}
fi
ifnumpdfstrcmp{#1}{bbb}=0%
href{example.com/bbb}{my bbb link}
fi
}
begin{document}
Here is myref{aaa}.
end{document}


But of course once I get a success (#1=aaa, say), I'm still testing the other 149 conditions for no reason. How to code this efficiently?







conditionals strings pdfstrcmp






share|improve this question














share|improve this question











share|improve this question




share|improve this question










asked May 28 at 12:59









Tim ATim A

1,1775 silver badges14 bronze badges




1,1775 silver badges14 bronze badges
















  • Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

    – Joseph Wright
    May 28 at 13:13











  • Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

    – Tim A
    May 28 at 13:16



















  • Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

    – Joseph Wright
    May 28 at 13:13











  • Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

    – Tim A
    May 28 at 13:16

















Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

– Joseph Wright
May 28 at 13:13





Are all of the outcomes of the form href{example.com/<string>}{my <string> link}?

– Joseph Wright
May 28 at 13:13













Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

– Tim A
May 28 at 13:16





Ah, I simplified too much. It will actually take two args. first arg goes in the link address, the second provides the link text. Like href{example.com/aaa}{The Title of the AAA Document} (link text will have completely different text on each invocation of the macro.

– Tim A
May 28 at 13:16










3 Answers
3






active

oldest

votes


















5


















I would e.g. create command names:



documentclass{article}
usepackage{hyperref}
makeatletter
@namedef{aaa@link}{href{example.com/aaa}{my aaa link}}
@namedef{bbb@link}{href{example.com/bbb}{my bbb link}}

newcommand{myref}[1]{%
csname #1@linkendcsname}

begin{document}
Here is myref{aaa}.
end{document}





share|improve this answer




































    2


















    let biber do the searching for you:



    assuming there is a file test.bib with



    @online{tex,
    note={my aaa text},
    url={tex.stackexchange.com}
    }

    @online{google,
    note={my bbb text},
    url={www.google.com}
    }


    then



    documentclass{article}
    usepackage{biblatex}

    addbibresource{test.bib}

    DeclareFieldFormat{url}{href{#1}{printfield{note}}}
    DeclareCiteCommand{myref}{}{usebibmacro{url}}{}{}

    usepackage{hyperref}

    begin{document}
    Here is myref{tex}

    myref{google}

    end{document}





    share|improve this answer




































      2


















      You can use xparse:



      pdfcompresslevel=0
      documentclass{article}
      usepackage{xparse}
      usepackage{hyperref}

      ExplSyntaxOn

      NewDocumentCommand{newref}{mmm}
      {% #1 = key, #2 = URL, #3 = description, #4 = options for href
      prop_gput:Nnx g_tima_sites_prop { #1 @ url } { tl_to_str:n { #2 } }
      prop_gput:Nnn g_tima_sites_prop { #1 @ desc } { #3 }
      }

      NewDocumentCommand{myref}{m}
      {% #1 = key
      tima_href:xx
      { prop_item:Nn g_tima_sites_prop {#1 @ url } }
      { prop_item:Nn g_tima_sites_prop {#1 @ desc } }
      }

      prop_new:N g_tima_sites_prop
      cs_new_protected:Nn tima_href:nn { href{#1}{#2} }
      cs_generate_variant:Nn tima_href:nn { xx }

      ExplSyntaxOff

      newref{texworks}{http://profs.scienze.univr.it/~gregorio/introtexworks}{TeX works intro}
      newref{arara}{http://profs.scienze.univr.it/~gregorio/introarara}{Arara intro}
      newref{tex.sx}{https://tex.stackexchange.com}{Nice site}

      begin{document}

      myref{texworks}

      myref{arara}

      myref{tex.sx}

      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/4.0/"u003ecc by-sa 4.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%2f493041%2fhow-do-i-test-for-a-unique-string-with-multiple-possibilities%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









        5


















        I would e.g. create command names:



        documentclass{article}
        usepackage{hyperref}
        makeatletter
        @namedef{aaa@link}{href{example.com/aaa}{my aaa link}}
        @namedef{bbb@link}{href{example.com/bbb}{my bbb link}}

        newcommand{myref}[1]{%
        csname #1@linkendcsname}

        begin{document}
        Here is myref{aaa}.
        end{document}





        share|improve this answer

































          5


















          I would e.g. create command names:



          documentclass{article}
          usepackage{hyperref}
          makeatletter
          @namedef{aaa@link}{href{example.com/aaa}{my aaa link}}
          @namedef{bbb@link}{href{example.com/bbb}{my bbb link}}

          newcommand{myref}[1]{%
          csname #1@linkendcsname}

          begin{document}
          Here is myref{aaa}.
          end{document}





          share|improve this answer































            5














            5










            5









            I would e.g. create command names:



            documentclass{article}
            usepackage{hyperref}
            makeatletter
            @namedef{aaa@link}{href{example.com/aaa}{my aaa link}}
            @namedef{bbb@link}{href{example.com/bbb}{my bbb link}}

            newcommand{myref}[1]{%
            csname #1@linkendcsname}

            begin{document}
            Here is myref{aaa}.
            end{document}





            share|improve this answer
















            I would e.g. create command names:



            documentclass{article}
            usepackage{hyperref}
            makeatletter
            @namedef{aaa@link}{href{example.com/aaa}{my aaa link}}
            @namedef{bbb@link}{href{example.com/bbb}{my bbb link}}

            newcommand{myref}[1]{%
            csname #1@linkendcsname}

            begin{document}
            Here is myref{aaa}.
            end{document}






            share|improve this answer















            share|improve this answer




            share|improve this answer








            edited May 28 at 13:33

























            answered May 28 at 13:14









            Ulrike FischerUlrike Fischer

            218k9 gold badges326 silver badges727 bronze badges




            218k9 gold badges326 silver badges727 bronze badges




























                2


















                let biber do the searching for you:



                assuming there is a file test.bib with



                @online{tex,
                note={my aaa text},
                url={tex.stackexchange.com}
                }

                @online{google,
                note={my bbb text},
                url={www.google.com}
                }


                then



                documentclass{article}
                usepackage{biblatex}

                addbibresource{test.bib}

                DeclareFieldFormat{url}{href{#1}{printfield{note}}}
                DeclareCiteCommand{myref}{}{usebibmacro{url}}{}{}

                usepackage{hyperref}

                begin{document}
                Here is myref{tex}

                myref{google}

                end{document}





                share|improve this answer

































                  2


















                  let biber do the searching for you:



                  assuming there is a file test.bib with



                  @online{tex,
                  note={my aaa text},
                  url={tex.stackexchange.com}
                  }

                  @online{google,
                  note={my bbb text},
                  url={www.google.com}
                  }


                  then



                  documentclass{article}
                  usepackage{biblatex}

                  addbibresource{test.bib}

                  DeclareFieldFormat{url}{href{#1}{printfield{note}}}
                  DeclareCiteCommand{myref}{}{usebibmacro{url}}{}{}

                  usepackage{hyperref}

                  begin{document}
                  Here is myref{tex}

                  myref{google}

                  end{document}





                  share|improve this answer































                    2














                    2










                    2









                    let biber do the searching for you:



                    assuming there is a file test.bib with



                    @online{tex,
                    note={my aaa text},
                    url={tex.stackexchange.com}
                    }

                    @online{google,
                    note={my bbb text},
                    url={www.google.com}
                    }


                    then



                    documentclass{article}
                    usepackage{biblatex}

                    addbibresource{test.bib}

                    DeclareFieldFormat{url}{href{#1}{printfield{note}}}
                    DeclareCiteCommand{myref}{}{usebibmacro{url}}{}{}

                    usepackage{hyperref}

                    begin{document}
                    Here is myref{tex}

                    myref{google}

                    end{document}





                    share|improve this answer
















                    let biber do the searching for you:



                    assuming there is a file test.bib with



                    @online{tex,
                    note={my aaa text},
                    url={tex.stackexchange.com}
                    }

                    @online{google,
                    note={my bbb text},
                    url={www.google.com}
                    }


                    then



                    documentclass{article}
                    usepackage{biblatex}

                    addbibresource{test.bib}

                    DeclareFieldFormat{url}{href{#1}{printfield{note}}}
                    DeclareCiteCommand{myref}{}{usebibmacro{url}}{}{}

                    usepackage{hyperref}

                    begin{document}
                    Here is myref{tex}

                    myref{google}

                    end{document}






                    share|improve this answer















                    share|improve this answer




                    share|improve this answer








                    edited May 28 at 13:27

























                    answered May 28 at 13:11









                    ianian

                    2868 bronze badges




                    2868 bronze badges


























                        2


















                        You can use xparse:



                        pdfcompresslevel=0
                        documentclass{article}
                        usepackage{xparse}
                        usepackage{hyperref}

                        ExplSyntaxOn

                        NewDocumentCommand{newref}{mmm}
                        {% #1 = key, #2 = URL, #3 = description, #4 = options for href
                        prop_gput:Nnx g_tima_sites_prop { #1 @ url } { tl_to_str:n { #2 } }
                        prop_gput:Nnn g_tima_sites_prop { #1 @ desc } { #3 }
                        }

                        NewDocumentCommand{myref}{m}
                        {% #1 = key
                        tima_href:xx
                        { prop_item:Nn g_tima_sites_prop {#1 @ url } }
                        { prop_item:Nn g_tima_sites_prop {#1 @ desc } }
                        }

                        prop_new:N g_tima_sites_prop
                        cs_new_protected:Nn tima_href:nn { href{#1}{#2} }
                        cs_generate_variant:Nn tima_href:nn { xx }

                        ExplSyntaxOff

                        newref{texworks}{http://profs.scienze.univr.it/~gregorio/introtexworks}{TeX works intro}
                        newref{arara}{http://profs.scienze.univr.it/~gregorio/introarara}{Arara intro}
                        newref{tex.sx}{https://tex.stackexchange.com}{Nice site}

                        begin{document}

                        myref{texworks}

                        myref{arara}

                        myref{tex.sx}

                        end{document}





                        share|improve this answer































                          2


















                          You can use xparse:



                          pdfcompresslevel=0
                          documentclass{article}
                          usepackage{xparse}
                          usepackage{hyperref}

                          ExplSyntaxOn

                          NewDocumentCommand{newref}{mmm}
                          {% #1 = key, #2 = URL, #3 = description, #4 = options for href
                          prop_gput:Nnx g_tima_sites_prop { #1 @ url } { tl_to_str:n { #2 } }
                          prop_gput:Nnn g_tima_sites_prop { #1 @ desc } { #3 }
                          }

                          NewDocumentCommand{myref}{m}
                          {% #1 = key
                          tima_href:xx
                          { prop_item:Nn g_tima_sites_prop {#1 @ url } }
                          { prop_item:Nn g_tima_sites_prop {#1 @ desc } }
                          }

                          prop_new:N g_tima_sites_prop
                          cs_new_protected:Nn tima_href:nn { href{#1}{#2} }
                          cs_generate_variant:Nn tima_href:nn { xx }

                          ExplSyntaxOff

                          newref{texworks}{http://profs.scienze.univr.it/~gregorio/introtexworks}{TeX works intro}
                          newref{arara}{http://profs.scienze.univr.it/~gregorio/introarara}{Arara intro}
                          newref{tex.sx}{https://tex.stackexchange.com}{Nice site}

                          begin{document}

                          myref{texworks}

                          myref{arara}

                          myref{tex.sx}

                          end{document}





                          share|improve this answer





























                            2














                            2










                            2









                            You can use xparse:



                            pdfcompresslevel=0
                            documentclass{article}
                            usepackage{xparse}
                            usepackage{hyperref}

                            ExplSyntaxOn

                            NewDocumentCommand{newref}{mmm}
                            {% #1 = key, #2 = URL, #3 = description, #4 = options for href
                            prop_gput:Nnx g_tima_sites_prop { #1 @ url } { tl_to_str:n { #2 } }
                            prop_gput:Nnn g_tima_sites_prop { #1 @ desc } { #3 }
                            }

                            NewDocumentCommand{myref}{m}
                            {% #1 = key
                            tima_href:xx
                            { prop_item:Nn g_tima_sites_prop {#1 @ url } }
                            { prop_item:Nn g_tima_sites_prop {#1 @ desc } }
                            }

                            prop_new:N g_tima_sites_prop
                            cs_new_protected:Nn tima_href:nn { href{#1}{#2} }
                            cs_generate_variant:Nn tima_href:nn { xx }

                            ExplSyntaxOff

                            newref{texworks}{http://profs.scienze.univr.it/~gregorio/introtexworks}{TeX works intro}
                            newref{arara}{http://profs.scienze.univr.it/~gregorio/introarara}{Arara intro}
                            newref{tex.sx}{https://tex.stackexchange.com}{Nice site}

                            begin{document}

                            myref{texworks}

                            myref{arara}

                            myref{tex.sx}

                            end{document}





                            share|improve this answer














                            You can use xparse:



                            pdfcompresslevel=0
                            documentclass{article}
                            usepackage{xparse}
                            usepackage{hyperref}

                            ExplSyntaxOn

                            NewDocumentCommand{newref}{mmm}
                            {% #1 = key, #2 = URL, #3 = description, #4 = options for href
                            prop_gput:Nnx g_tima_sites_prop { #1 @ url } { tl_to_str:n { #2 } }
                            prop_gput:Nnn g_tima_sites_prop { #1 @ desc } { #3 }
                            }

                            NewDocumentCommand{myref}{m}
                            {% #1 = key
                            tima_href:xx
                            { prop_item:Nn g_tima_sites_prop {#1 @ url } }
                            { prop_item:Nn g_tima_sites_prop {#1 @ desc } }
                            }

                            prop_new:N g_tima_sites_prop
                            cs_new_protected:Nn tima_href:nn { href{#1}{#2} }
                            cs_generate_variant:Nn tima_href:nn { xx }

                            ExplSyntaxOff

                            newref{texworks}{http://profs.scienze.univr.it/~gregorio/introtexworks}{TeX works intro}
                            newref{arara}{http://profs.scienze.univr.it/~gregorio/introarara}{Arara intro}
                            newref{tex.sx}{https://tex.stackexchange.com}{Nice site}

                            begin{document}

                            myref{texworks}

                            myref{arara}

                            myref{tex.sx}

                            end{document}






                            share|improve this answer













                            share|improve this answer




                            share|improve this answer










                            answered May 28 at 15:38









                            egregegreg

                            775k92 gold badges2020 silver badges3381 bronze badges




                            775k92 gold badges2020 silver badges3381 bronze badges


































                                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%2f493041%2fhow-do-i-test-for-a-unique-string-with-multiple-possibilities%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

                                He _____ here since 1970 . Answer needed [closed]What does “since he was so high” mean?Meaning of “catch birds for”?How do I ensure “since” takes the meaning I want?“Who cares here” meaningWhat does “right round toward” mean?the time tense (had now been detected)What does the phrase “ring around the roses” mean here?Correct usage of “visited upon”Meaning of “foiled rail sabotage bid”It was the third time I had gone to Rome or It is the third time I had been to Rome

                                Bunad

                                Færeyskur hestur Heimild | Tengill | Tilvísanir | LeiðsagnarvalRossið - síða um færeyska hrossið á færeyskuGott ár hjá færeyska hestinum