How to create a string comparison with xparse's NewDocumentCommand?
My MWE was created with the help of these two Q&As: 1 and 2.
MWE:
documentclass{article}
usepackage{xparse}
usepackage{xstring}
usepackage{pdftexcmds}
% Command declaring a global definition if argument not empty, and using a pre-defined empty definition if argument empty
ExplSyntaxOn%
NewDocumentCommand{Client}{g}%
{%
IfNoValueTF{#1}%
{%
tl_use:N g_jalep_client_tl%
}%
{%
tl_gset:Nn g_jalep_client_tl {#1}%
}%
}%
tl_new:N g_jalep_client_tl%
ExplSyntaxOff%
% Attempt using pdfstrcmp
makeatletter
newcommandfoo[1]{%
ifnumpdf@strcmp{unexpanded{#1}}{Adam}=0 %
expandafter@firstoftwo
else
expandafter@secondoftwo
fi
{Adam}
{Eve}%
}
makeatother
begin{document}
Client{Adam}
% Attempt using xstring
par My client should be Adam: IfSubStr{Adam}{Client}{Adam}{Eve}
% Attempt using pdfstrcmp
par My client should be Adam: foo{Client}
end{document}
Output:

Notes:
- The
IfSubStrandfooline work when there exists something like:newcommand{Client}{Adam}ornewcommand{Client}{Eve}ornewcommand{Client}{Anything}. - From this, I'm inclined to believe
Clientproduces something other than a string? How do I change this/convert this/work with this when I'm trying to create an if-else statement?
Question:
How do I make a string comparison with the NewDocumentCommand shown in my MWE? Something like: If Client = Adam, then print: Adam, else print: Eve
macros expl3 xparse
add a comment |
My MWE was created with the help of these two Q&As: 1 and 2.
MWE:
documentclass{article}
usepackage{xparse}
usepackage{xstring}
usepackage{pdftexcmds}
% Command declaring a global definition if argument not empty, and using a pre-defined empty definition if argument empty
ExplSyntaxOn%
NewDocumentCommand{Client}{g}%
{%
IfNoValueTF{#1}%
{%
tl_use:N g_jalep_client_tl%
}%
{%
tl_gset:Nn g_jalep_client_tl {#1}%
}%
}%
tl_new:N g_jalep_client_tl%
ExplSyntaxOff%
% Attempt using pdfstrcmp
makeatletter
newcommandfoo[1]{%
ifnumpdf@strcmp{unexpanded{#1}}{Adam}=0 %
expandafter@firstoftwo
else
expandafter@secondoftwo
fi
{Adam}
{Eve}%
}
makeatother
begin{document}
Client{Adam}
% Attempt using xstring
par My client should be Adam: IfSubStr{Adam}{Client}{Adam}{Eve}
% Attempt using pdfstrcmp
par My client should be Adam: foo{Client}
end{document}
Output:

Notes:
- The
IfSubStrandfooline work when there exists something like:newcommand{Client}{Adam}ornewcommand{Client}{Eve}ornewcommand{Client}{Anything}. - From this, I'm inclined to believe
Clientproduces something other than a string? How do I change this/convert this/work with this when I'm trying to create an if-else statement?
Question:
How do I make a string comparison with the NewDocumentCommand shown in my MWE? Something like: If Client = Adam, then print: Adam, else print: Eve
macros expl3 xparse
1
Are you open to alterations to the definition ofClient?
– Werner
1 hour ago
@Werner Yes, though in my document: 1.Clientis always called either empty like this:Client{}or with any argument like this:Client{Argument}. 2.Client{}orClient{Argument}should print nothing, and only the commandClientshould print whatever the global definition defined withClientis
– Jalep
46 mins ago
1
So, a first call toClient{<name>}destroys its and just stores the<name>.
– Werner
16 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago
add a comment |
My MWE was created with the help of these two Q&As: 1 and 2.
MWE:
documentclass{article}
usepackage{xparse}
usepackage{xstring}
usepackage{pdftexcmds}
% Command declaring a global definition if argument not empty, and using a pre-defined empty definition if argument empty
ExplSyntaxOn%
NewDocumentCommand{Client}{g}%
{%
IfNoValueTF{#1}%
{%
tl_use:N g_jalep_client_tl%
}%
{%
tl_gset:Nn g_jalep_client_tl {#1}%
}%
}%
tl_new:N g_jalep_client_tl%
ExplSyntaxOff%
% Attempt using pdfstrcmp
makeatletter
newcommandfoo[1]{%
ifnumpdf@strcmp{unexpanded{#1}}{Adam}=0 %
expandafter@firstoftwo
else
expandafter@secondoftwo
fi
{Adam}
{Eve}%
}
makeatother
begin{document}
Client{Adam}
% Attempt using xstring
par My client should be Adam: IfSubStr{Adam}{Client}{Adam}{Eve}
% Attempt using pdfstrcmp
par My client should be Adam: foo{Client}
end{document}
Output:

Notes:
- The
IfSubStrandfooline work when there exists something like:newcommand{Client}{Adam}ornewcommand{Client}{Eve}ornewcommand{Client}{Anything}. - From this, I'm inclined to believe
Clientproduces something other than a string? How do I change this/convert this/work with this when I'm trying to create an if-else statement?
Question:
How do I make a string comparison with the NewDocumentCommand shown in my MWE? Something like: If Client = Adam, then print: Adam, else print: Eve
macros expl3 xparse
My MWE was created with the help of these two Q&As: 1 and 2.
MWE:
documentclass{article}
usepackage{xparse}
usepackage{xstring}
usepackage{pdftexcmds}
% Command declaring a global definition if argument not empty, and using a pre-defined empty definition if argument empty
ExplSyntaxOn%
NewDocumentCommand{Client}{g}%
{%
IfNoValueTF{#1}%
{%
tl_use:N g_jalep_client_tl%
}%
{%
tl_gset:Nn g_jalep_client_tl {#1}%
}%
}%
tl_new:N g_jalep_client_tl%
ExplSyntaxOff%
% Attempt using pdfstrcmp
makeatletter
newcommandfoo[1]{%
ifnumpdf@strcmp{unexpanded{#1}}{Adam}=0 %
expandafter@firstoftwo
else
expandafter@secondoftwo
fi
{Adam}
{Eve}%
}
makeatother
begin{document}
Client{Adam}
% Attempt using xstring
par My client should be Adam: IfSubStr{Adam}{Client}{Adam}{Eve}
% Attempt using pdfstrcmp
par My client should be Adam: foo{Client}
end{document}
Output:

Notes:
- The
IfSubStrandfooline work when there exists something like:newcommand{Client}{Adam}ornewcommand{Client}{Eve}ornewcommand{Client}{Anything}. - From this, I'm inclined to believe
Clientproduces something other than a string? How do I change this/convert this/work with this when I'm trying to create an if-else statement?
Question:
How do I make a string comparison with the NewDocumentCommand shown in my MWE? Something like: If Client = Adam, then print: Adam, else print: Eve
macros expl3 xparse
macros expl3 xparse
edited 34 mins ago
Jalep
asked 2 hours ago
JalepJalep
577
577
1
Are you open to alterations to the definition ofClient?
– Werner
1 hour ago
@Werner Yes, though in my document: 1.Clientis always called either empty like this:Client{}or with any argument like this:Client{Argument}. 2.Client{}orClient{Argument}should print nothing, and only the commandClientshould print whatever the global definition defined withClientis
– Jalep
46 mins ago
1
So, a first call toClient{<name>}destroys its and just stores the<name>.
– Werner
16 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago
add a comment |
1
Are you open to alterations to the definition ofClient?
– Werner
1 hour ago
@Werner Yes, though in my document: 1.Clientis always called either empty like this:Client{}or with any argument like this:Client{Argument}. 2.Client{}orClient{Argument}should print nothing, and only the commandClientshould print whatever the global definition defined withClientis
– Jalep
46 mins ago
1
So, a first call toClient{<name>}destroys its and just stores the<name>.
– Werner
16 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago
1
1
Are you open to alterations to the definition of
Client?– Werner
1 hour ago
Are you open to alterations to the definition of
Client?– Werner
1 hour ago
@Werner Yes, though in my document: 1.
Client is always called either empty like this: Client{} or with any argument like this: Client{Argument}. 2. Client{} or Client{Argument} should print nothing, and only the command Client should print whatever the global definition defined with Client is– Jalep
46 mins ago
@Werner Yes, though in my document: 1.
Client is always called either empty like this: Client{} or with any argument like this: Client{Argument}. 2. Client{} or Client{Argument} should print nothing, and only the command Client should print whatever the global definition defined with Client is– Jalep
46 mins ago
1
1
So, a first call to
Client{<name>} destroys its and just stores the <name>.– Werner
16 mins ago
So, a first call to
Client{<name>} destroys its and just stores the <name>.– Werner
16 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago
add a comment |
0
active
oldest
votes
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
});
}
});
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%2f470322%2fhow-to-create-a-string-comparison-with-xparses-newdocumentcommand%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f470322%2fhow-to-create-a-string-comparison-with-xparses-newdocumentcommand%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
1
Are you open to alterations to the definition of
Client?– Werner
1 hour ago
@Werner Yes, though in my document: 1.
Clientis always called either empty like this:Client{}or with any argument like this:Client{Argument}. 2.Client{}orClient{Argument}should print nothing, and only the commandClientshould print whatever the global definition defined withClientis– Jalep
46 mins ago
1
So, a first call to
Client{<name>}destroys its and just stores the<name>.– Werner
16 mins ago
@Werner Yes! Correct
– Jalep
5 mins ago