String comparison, eExtract number from string and compare problemString comparison in ifthenelseifthenelse...
Why do phishing e-mails use faked e-mail addresses instead of the real one?
Windows Server Datacenter Edition - Unlimited Virtual Machines
Are all players supposed to be able to see each others' character sheets?
Why does liquid water form when we exhale on a mirror?
Giving a career talk in my old university, how prominently should I tell students my salary?
Doesn't allowing a user mode program to access kernel space memory and execute the IN and OUT instructions defeat the purpose of having CPU modes?
Why does cron require MTA for logging?
Has a sovereign Communist government ever run, and conceded loss, on a fair election?
Source permutation
Called into a meeting and told we are being made redundant (laid off) and "not to share outside". Can I tell my partner?
What's the 'present simple' form of the word "нашла́" in 3rd person singular female?
In the late 1940’s to early 1950’s what technology was available that could melt a LOT of ice?
How does Ehrenfest's theorem apply to the quantum harmonic oscillator?
How many characters using PHB rules does it take to be able to have access to any PHB spell at the start of an adventuring day?
Why aren't there more Gauls like Obelix?
How to write a chaotic neutral protagonist and prevent my readers from thinking they are evil?
Is divide-by-zero a security vulnerability?
School performs periodic password audits. Is my password compromised?
I reported the illegal activity of my boss to his boss. My boss found out. Now I am being punished. What should I do?
When Schnorr signatures are part of Bitcoin will it be possible validate each block with only one signature validation?
Do I really need to have a scientific explanation for my premise?
Is it possible to find 2014 distinct positive integers whose sum is divisible by each of them?
Was it really inappropriate to write a pull request for the company I interviewed with?
Trig Subsitution When There's No Square Root
String comparison, e
Extract number from string and compare problemString comparison in ifthenelseifthenelse equal string comparison failsConvert numbers in string to stringUse item as a string in comparisonString comparisonUnexpanded string replaceLess-than string comparison like ifstrequalString manipulation in xstringTrying to get zap@space and lowercase to work on string comparison
The scenario: reading a date in a yyyy-mm-dd
form from a file to a cs. This cs later gets compared to a 'current date' macro to write a few args in a specific way to an external file. The current day macro is along the lines of
% defTODAY{}
% defToday{theyear-TwoDigits{themonth}-TwoDigits{theday} }
defTODAY{xdefToday{theyear-TwoDigits{themonth}-TwoDigits{theday}}}
This works for the labeling things, since ref{yyyy-mm-dd}
works as intended. Having no extra TODAY
and then using def
'd Today does so to, it's the comparison that's not working. etoolbox
's ifstrequal
is not what I used before. Whenever the date would change I used a single xdef
and later passed that macro to a ifx
, and to get it to work I had to define the date with a appended. edit Read to my amazement inserts a single space after whatever's been read.
Currently I'm supposedly fixing things, but I broke it somehow, and now it doesn't match at all. The first culprit was the my TwoDigits
cmd was robust, changing it back to def
instead of NewDocumentCommand
fixed that. The latter is for user-level commands, so I'll let that slip. But the results of the mwe are not clear to me.
0.txt
contains one line with 2001-01-01
and a line new afterwards, as if one line had been written to it and the output had been closed.
The questions:
- What the 'right' way to compare things (macro, cs, command?) are that (should) expand to strings?
- Why don't
edef
,xdef
work here, I thought it was a full expansion, and indeed before (my version control is nigh absent so I can't give a mwe for this) it worked. - What is the significance of robustness? Is there a simple rule of thumb when it's necessary, obligatory, or irrelevant?
- It working with
xstring
'sIfStrEqual
only if theis inserted in the definition of
datemacro
, rather than in the comparison's brackets, i.e.,{datemacro }
. Why?
ifstrequal
supposedly doesn't expand- I used once in a command to test if an arguments is equal to&
, this works- is #1 becoming whatever was input not count as an expansion?
example 1;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox}
newreadperiods
openinperiods=0.txt
begin{document}setlengthparindent{0pt}fontsize{20}{20}selectfont
deftesti{2001-01-01}
edeftestii{2001-01-01}
deftestiii{2001-01-01 }
edeftestiiii{2001-01-01 }
globalreadperiods to DDD
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifx{testi}{2001-01-01} T\else F\fi% F
ifx{testii}{2001-01-01} T\else F\fi% F
ifx{testiii}{2001-01-01} T\else F\fi% F
ifx{testiiii}{2001-01-01} T\else F\fi% F
ifx{DDD}{2001-01-01} T\else F\fi% F
ifx{testi}{DDD} T\else F\fi% F
ifx{testii}{DDD} T\else F\fi% F
ifx{testiii}{DDD} T\else F\fi% F
ifx{testiiii}{DDD} T\else F\fi% F
ifx{DDD}{DDD} T\else F\fi% F
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% T
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
end{document}
example 2;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox,xstring}
defTwoDigits#1{ifnum#1<10 0#1else#1fi}
newcountmonth
month 1relax
newcountday
day 1relax
newreadperiods
openinperiods=0.txt
globalreadperiods to DDD
deftesti{2001-TwoDigits{themonth}-TwoDigits{theday}}%
edeftestii{2001-TwoDigits{themonth}-TwoDigits{theday}}%
deftestiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
edeftestiiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
begin{document}setlengthparindent{0pt}
DDD is DDD.% space between cs and .
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifxtesti{2001-01-01} T\else F\fi% F
ifxtestii{2001-01-01} T\else F\fi% F
ifxtestiii{2001-01-01} T\else F\fi% F
ifxtestiiii{2001-01-01} T\else F\fi% F
ifxDDD{2001-01-01} T\else F\fi% F
ifxtestiDDD T\else F\fi% F
ifxtestiiDDD T\else F\fi% F
ifxtestiiiDDD T\else F\fi% F
ifxtestiiiiDDD T\else F\fi% T
ifxDDDDDD T\else F\fi% T
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% F
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
IfStrEq{testi}{DDD}{T\}{F\}% F
IfStrEq{testii}{DDD}{T\}{F\}% F
IfStrEq{testi }{DDD}{T\}{F\}% F
IfStrEq{testii }{DDD}{T\}{F\}% F
IfStrEq{testiii}{DDD}{T\}{F\}% T
IfStrEq{testiiii}{DDD}{T\}{F\}% T
IfStrEq{DDD}{DDD}{T\}{F\}% T
end{document}
conditionals etoolbox strings xstring
add a comment |
The scenario: reading a date in a yyyy-mm-dd
form from a file to a cs. This cs later gets compared to a 'current date' macro to write a few args in a specific way to an external file. The current day macro is along the lines of
% defTODAY{}
% defToday{theyear-TwoDigits{themonth}-TwoDigits{theday} }
defTODAY{xdefToday{theyear-TwoDigits{themonth}-TwoDigits{theday}}}
This works for the labeling things, since ref{yyyy-mm-dd}
works as intended. Having no extra TODAY
and then using def
'd Today does so to, it's the comparison that's not working. etoolbox
's ifstrequal
is not what I used before. Whenever the date would change I used a single xdef
and later passed that macro to a ifx
, and to get it to work I had to define the date with a appended. edit Read to my amazement inserts a single space after whatever's been read.
Currently I'm supposedly fixing things, but I broke it somehow, and now it doesn't match at all. The first culprit was the my TwoDigits
cmd was robust, changing it back to def
instead of NewDocumentCommand
fixed that. The latter is for user-level commands, so I'll let that slip. But the results of the mwe are not clear to me.
0.txt
contains one line with 2001-01-01
and a line new afterwards, as if one line had been written to it and the output had been closed.
The questions:
- What the 'right' way to compare things (macro, cs, command?) are that (should) expand to strings?
- Why don't
edef
,xdef
work here, I thought it was a full expansion, and indeed before (my version control is nigh absent so I can't give a mwe for this) it worked. - What is the significance of robustness? Is there a simple rule of thumb when it's necessary, obligatory, or irrelevant?
- It working with
xstring
'sIfStrEqual
only if theis inserted in the definition of
datemacro
, rather than in the comparison's brackets, i.e.,{datemacro }
. Why?
ifstrequal
supposedly doesn't expand- I used once in a command to test if an arguments is equal to&
, this works- is #1 becoming whatever was input not count as an expansion?
example 1;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox}
newreadperiods
openinperiods=0.txt
begin{document}setlengthparindent{0pt}fontsize{20}{20}selectfont
deftesti{2001-01-01}
edeftestii{2001-01-01}
deftestiii{2001-01-01 }
edeftestiiii{2001-01-01 }
globalreadperiods to DDD
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifx{testi}{2001-01-01} T\else F\fi% F
ifx{testii}{2001-01-01} T\else F\fi% F
ifx{testiii}{2001-01-01} T\else F\fi% F
ifx{testiiii}{2001-01-01} T\else F\fi% F
ifx{DDD}{2001-01-01} T\else F\fi% F
ifx{testi}{DDD} T\else F\fi% F
ifx{testii}{DDD} T\else F\fi% F
ifx{testiii}{DDD} T\else F\fi% F
ifx{testiiii}{DDD} T\else F\fi% F
ifx{DDD}{DDD} T\else F\fi% F
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% T
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
end{document}
example 2;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox,xstring}
defTwoDigits#1{ifnum#1<10 0#1else#1fi}
newcountmonth
month 1relax
newcountday
day 1relax
newreadperiods
openinperiods=0.txt
globalreadperiods to DDD
deftesti{2001-TwoDigits{themonth}-TwoDigits{theday}}%
edeftestii{2001-TwoDigits{themonth}-TwoDigits{theday}}%
deftestiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
edeftestiiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
begin{document}setlengthparindent{0pt}
DDD is DDD.% space between cs and .
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifxtesti{2001-01-01} T\else F\fi% F
ifxtestii{2001-01-01} T\else F\fi% F
ifxtestiii{2001-01-01} T\else F\fi% F
ifxtestiiii{2001-01-01} T\else F\fi% F
ifxDDD{2001-01-01} T\else F\fi% F
ifxtestiDDD T\else F\fi% F
ifxtestiiDDD T\else F\fi% F
ifxtestiiiDDD T\else F\fi% F
ifxtestiiiiDDD T\else F\fi% T
ifxDDDDDD T\else F\fi% T
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% F
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
IfStrEq{testi}{DDD}{T\}{F\}% F
IfStrEq{testii}{DDD}{T\}{F\}% F
IfStrEq{testi }{DDD}{T\}{F\}% F
IfStrEq{testii }{DDD}{T\}{F\}% F
IfStrEq{testiii}{DDD}{T\}{F\}% T
IfStrEq{testiiii}{DDD}{T\}{F\}% T
IfStrEq{DDD}{DDD}{T\}{F\}% T
end{document}
conditionals etoolbox strings xstring
add a comment |
The scenario: reading a date in a yyyy-mm-dd
form from a file to a cs. This cs later gets compared to a 'current date' macro to write a few args in a specific way to an external file. The current day macro is along the lines of
% defTODAY{}
% defToday{theyear-TwoDigits{themonth}-TwoDigits{theday} }
defTODAY{xdefToday{theyear-TwoDigits{themonth}-TwoDigits{theday}}}
This works for the labeling things, since ref{yyyy-mm-dd}
works as intended. Having no extra TODAY
and then using def
'd Today does so to, it's the comparison that's not working. etoolbox
's ifstrequal
is not what I used before. Whenever the date would change I used a single xdef
and later passed that macro to a ifx
, and to get it to work I had to define the date with a appended. edit Read to my amazement inserts a single space after whatever's been read.
Currently I'm supposedly fixing things, but I broke it somehow, and now it doesn't match at all. The first culprit was the my TwoDigits
cmd was robust, changing it back to def
instead of NewDocumentCommand
fixed that. The latter is for user-level commands, so I'll let that slip. But the results of the mwe are not clear to me.
0.txt
contains one line with 2001-01-01
and a line new afterwards, as if one line had been written to it and the output had been closed.
The questions:
- What the 'right' way to compare things (macro, cs, command?) are that (should) expand to strings?
- Why don't
edef
,xdef
work here, I thought it was a full expansion, and indeed before (my version control is nigh absent so I can't give a mwe for this) it worked. - What is the significance of robustness? Is there a simple rule of thumb when it's necessary, obligatory, or irrelevant?
- It working with
xstring
'sIfStrEqual
only if theis inserted in the definition of
datemacro
, rather than in the comparison's brackets, i.e.,{datemacro }
. Why?
ifstrequal
supposedly doesn't expand- I used once in a command to test if an arguments is equal to&
, this works- is #1 becoming whatever was input not count as an expansion?
example 1;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox}
newreadperiods
openinperiods=0.txt
begin{document}setlengthparindent{0pt}fontsize{20}{20}selectfont
deftesti{2001-01-01}
edeftestii{2001-01-01}
deftestiii{2001-01-01 }
edeftestiiii{2001-01-01 }
globalreadperiods to DDD
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifx{testi}{2001-01-01} T\else F\fi% F
ifx{testii}{2001-01-01} T\else F\fi% F
ifx{testiii}{2001-01-01} T\else F\fi% F
ifx{testiiii}{2001-01-01} T\else F\fi% F
ifx{DDD}{2001-01-01} T\else F\fi% F
ifx{testi}{DDD} T\else F\fi% F
ifx{testii}{DDD} T\else F\fi% F
ifx{testiii}{DDD} T\else F\fi% F
ifx{testiiii}{DDD} T\else F\fi% F
ifx{DDD}{DDD} T\else F\fi% F
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% T
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
end{document}
example 2;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox,xstring}
defTwoDigits#1{ifnum#1<10 0#1else#1fi}
newcountmonth
month 1relax
newcountday
day 1relax
newreadperiods
openinperiods=0.txt
globalreadperiods to DDD
deftesti{2001-TwoDigits{themonth}-TwoDigits{theday}}%
edeftestii{2001-TwoDigits{themonth}-TwoDigits{theday}}%
deftestiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
edeftestiiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
begin{document}setlengthparindent{0pt}
DDD is DDD.% space between cs and .
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifxtesti{2001-01-01} T\else F\fi% F
ifxtestii{2001-01-01} T\else F\fi% F
ifxtestiii{2001-01-01} T\else F\fi% F
ifxtestiiii{2001-01-01} T\else F\fi% F
ifxDDD{2001-01-01} T\else F\fi% F
ifxtestiDDD T\else F\fi% F
ifxtestiiDDD T\else F\fi% F
ifxtestiiiDDD T\else F\fi% F
ifxtestiiiiDDD T\else F\fi% T
ifxDDDDDD T\else F\fi% T
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% F
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
IfStrEq{testi}{DDD}{T\}{F\}% F
IfStrEq{testii}{DDD}{T\}{F\}% F
IfStrEq{testi }{DDD}{T\}{F\}% F
IfStrEq{testii }{DDD}{T\}{F\}% F
IfStrEq{testiii}{DDD}{T\}{F\}% T
IfStrEq{testiiii}{DDD}{T\}{F\}% T
IfStrEq{DDD}{DDD}{T\}{F\}% T
end{document}
conditionals etoolbox strings xstring
The scenario: reading a date in a yyyy-mm-dd
form from a file to a cs. This cs later gets compared to a 'current date' macro to write a few args in a specific way to an external file. The current day macro is along the lines of
% defTODAY{}
% defToday{theyear-TwoDigits{themonth}-TwoDigits{theday} }
defTODAY{xdefToday{theyear-TwoDigits{themonth}-TwoDigits{theday}}}
This works for the labeling things, since ref{yyyy-mm-dd}
works as intended. Having no extra TODAY
and then using def
'd Today does so to, it's the comparison that's not working. etoolbox
's ifstrequal
is not what I used before. Whenever the date would change I used a single xdef
and later passed that macro to a ifx
, and to get it to work I had to define the date with a appended. edit Read to my amazement inserts a single space after whatever's been read.
Currently I'm supposedly fixing things, but I broke it somehow, and now it doesn't match at all. The first culprit was the my TwoDigits
cmd was robust, changing it back to def
instead of NewDocumentCommand
fixed that. The latter is for user-level commands, so I'll let that slip. But the results of the mwe are not clear to me.
0.txt
contains one line with 2001-01-01
and a line new afterwards, as if one line had been written to it and the output had been closed.
The questions:
- What the 'right' way to compare things (macro, cs, command?) are that (should) expand to strings?
- Why don't
edef
,xdef
work here, I thought it was a full expansion, and indeed before (my version control is nigh absent so I can't give a mwe for this) it worked. - What is the significance of robustness? Is there a simple rule of thumb when it's necessary, obligatory, or irrelevant?
- It working with
xstring
'sIfStrEqual
only if theis inserted in the definition of
datemacro
, rather than in the comparison's brackets, i.e.,{datemacro }
. Why?
ifstrequal
supposedly doesn't expand- I used once in a command to test if an arguments is equal to&
, this works- is #1 becoming whatever was input not count as an expansion?
example 1;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox}
newreadperiods
openinperiods=0.txt
begin{document}setlengthparindent{0pt}fontsize{20}{20}selectfont
deftesti{2001-01-01}
edeftestii{2001-01-01}
deftestiii{2001-01-01 }
edeftestiiii{2001-01-01 }
globalreadperiods to DDD
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifx{testi}{2001-01-01} T\else F\fi% F
ifx{testii}{2001-01-01} T\else F\fi% F
ifx{testiii}{2001-01-01} T\else F\fi% F
ifx{testiiii}{2001-01-01} T\else F\fi% F
ifx{DDD}{2001-01-01} T\else F\fi% F
ifx{testi}{DDD} T\else F\fi% F
ifx{testii}{DDD} T\else F\fi% F
ifx{testiii}{DDD} T\else F\fi% F
ifx{testiiii}{DDD} T\else F\fi% F
ifx{DDD}{DDD} T\else F\fi% F
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% T
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
end{document}
example 2;
documentclass{article}
usepackage[top=1.5cm, bottom=0.6cm, hmargin=1.5cm]{geometry}
usepackage{etoolbox,xstring}
defTwoDigits#1{ifnum#1<10 0#1else#1fi}
newcountmonth
month 1relax
newcountday
day 1relax
newreadperiods
openinperiods=0.txt
globalreadperiods to DDD
deftesti{2001-TwoDigits{themonth}-TwoDigits{theday}}%
edeftestii{2001-TwoDigits{themonth}-TwoDigits{theday}}%
deftestiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
edeftestiiii{2001-TwoDigits{themonth}-TwoDigits{theday} }%
begin{document}setlengthparindent{0pt}
DDD is DDD.% space between cs and .
ifstrequal{testi}{2001-01-01}{T\}{F\}% F
ifstrequal{testii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiii}{2001-01-01}{T\}{F\}% F
ifstrequal{testiiii}{2001-01-01}{T\}{F\}% F
ifstrequal{DDD}{2001-01-01}{T\}{F\}% F
ifstrequal{testi}{DDD}{T\}{F\}% F
ifstrequal{testii}{DDD}{T\}{F\}% F
ifstrequal{testiii}{DDD}{T\}{F\}% F
ifstrequal{testiiii}{DDD}{T\}{F\}% F
ifstrequal{DDD}{DDD}{T\}{F\}% T
ifxtesti{2001-01-01} T\else F\fi% F
ifxtestii{2001-01-01} T\else F\fi% F
ifxtestiii{2001-01-01} T\else F\fi% F
ifxtestiiii{2001-01-01} T\else F\fi% F
ifxDDD{2001-01-01} T\else F\fi% F
ifxtestiDDD T\else F\fi% F
ifxtestiiDDD T\else F\fi% F
ifxtestiiiDDD T\else F\fi% F
ifxtestiiiiDDD T\else F\fi% T
ifxDDDDDD T\else F\fi% T
ifcsequal{testi}{DDD}{T\}{F\}% F
ifcsequal{testii}{DDD}{T\}{F\}% F
ifcsequal{testiii}{DDD}{T\}{F\}% F
ifcsequal{testiiii}{DDD}{T\}{F\}% F
ifcsequal{DDD}{DDD}{T\}{F\}% F
ifdefequal{testi}{DDD}{T\}{F\}% F
ifdefequal{testii}{DDD}{T\}{F\}% F
ifdefequal{testiii}{DDD}{T\}{F\}% F
ifdefequal{testiiii}{DDD}{T\}{F\}% T
ifdefequal{DDD}{DDD}{T\}{F\}% T
IfStrEq{testi}{DDD}{T\}{F\}% F
IfStrEq{testii}{DDD}{T\}{F\}% F
IfStrEq{testi }{DDD}{T\}{F\}% F
IfStrEq{testii }{DDD}{T\}{F\}% F
IfStrEq{testiii}{DDD}{T\}{F\}% T
IfStrEq{testiiii}{DDD}{T\}{F\}% T
IfStrEq{DDD}{DDD}{T\}{F\}% T
end{document}
conditionals etoolbox strings xstring
conditionals etoolbox strings xstring
asked 44 secs ago
vlgvlg
1169
1169
add a comment |
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%2f478835%2fstring-comparison-e%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%2f478835%2fstring-comparison-e%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