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;
}
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
add a comment
|
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
Are all of the outcomes of the formhref{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
add a comment
|
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
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
conditionals strings pdfstrcmp
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 formhref{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
add a comment
|
Are all of the outcomes of the formhref{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
add a comment
|
3 Answers
3
active
oldest
votes
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}
add a comment
|
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}
add a comment
|
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}
add a comment
|
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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}
add a comment
|
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}
add a comment
|
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}
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}
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
add a comment
|
add a comment
|
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}
add a comment
|
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}
add a comment
|
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}
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}
edited May 28 at 13:27
answered May 28 at 13:11
ianian
2868 bronze badges
2868 bronze badges
add a comment
|
add a comment
|
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}
add a comment
|
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}
add a comment
|
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}
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}
answered May 28 at 15:38
egregegreg
775k92 gold badges2020 silver badges3381 bronze badges
775k92 gold badges2020 silver badges3381 bronze badges
add a comment
|
add a comment
|
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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