How to create a string comparison with xparse's NewDocumentCommand?












0















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:



enter image description here



Notes:




  1. The IfSubStr and foo line work when there exists something like: newcommand{Client}{Adam} or newcommand{Client}{Eve} or newcommand{Client}{Anything}.

  2. From this, I'm inclined to believe Client produces 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










share|improve this question




















  • 1





    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








  • 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
















0















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:



enter image description here



Notes:




  1. The IfSubStr and foo line work when there exists something like: newcommand{Client}{Adam} or newcommand{Client}{Eve} or newcommand{Client}{Anything}.

  2. From this, I'm inclined to believe Client produces 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










share|improve this question




















  • 1





    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








  • 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














0












0








0


1






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:



enter image description here



Notes:




  1. The IfSubStr and foo line work when there exists something like: newcommand{Client}{Adam} or newcommand{Client}{Eve} or newcommand{Client}{Anything}.

  2. From this, I'm inclined to believe Client produces 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










share|improve this question
















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:



enter image description here



Notes:




  1. The IfSubStr and foo line work when there exists something like: newcommand{Client}{Adam} or newcommand{Client}{Eve} or newcommand{Client}{Anything}.

  2. From this, I'm inclined to believe Client produces 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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 34 mins ago







Jalep

















asked 2 hours ago









JalepJalep

577




577








  • 1





    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








  • 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














  • 1





    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








  • 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








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










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
});


}
});














draft saved

draft discarded


















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
















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%2f470322%2fhow-to-create-a-string-comparison-with-xparses-newdocumentcommand%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

Entries order in /etc/network/interfaces

新発田市

Grub takes very long (several minutes) to open Menu (in Multi-Boot-System)