如何比较两个字符串(标记列表)?我想知道是否2021-05-16
在前面2021-06-01
。我们可以假设两个字符串的长度相同。我找到了宏\tl_if_eq
、\str_if_eq
和\int_compare
,但没有像(假设的)\tl_if_lt
或这样的真正的“在前面”字符串比较\tl_compare
。
答案1
如果您确定您的参数扩展到正确的 ISO 日期,您可以执行以下操作:
\documentclass{article}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\isisodatebeforeTF}{mmmm}
{
\mhchem_isisodatebefore:eeTF { #1 } { #2 } { #3 } { #4 }
}
\prg_new_conditional:Nnn \mhchem_isisodatebefore:nn { p, T, F, TF }
{
\int_compare:nTF
{
\tl_range:nnn { #1 } { 1 } { 4 }
\tl_range:nnn { #1 } { 6 } { 7 }
\tl_range:nnn { #1 } { 9 } { 10 }
>
\tl_range:nnn { #2 } { 1 } { 4 }
\tl_range:nnn { #2 } { 6 } { 7 }
\tl_range:nnn { #2 } { 9 } { 10 }
}
{ \prg_return_true: } { \prg_return_false: }
}
\prg_generate_conditional_variant:Nnn \mhchem_isisodatebefore:nn { ee } { p, T, F, TF }
\ExplSyntaxOff
\begin{document}
\isisodatebeforeTF{2021-05-16}{2021-06-01}{Yes}{No}
\isisodatebeforeTF{2021-06-01}{2021-05-16}{Yes}{No}
\isisodatebeforeTF{2021-05-16}{2021-05-16}{Yes}{No}
\def\dateA{2021-05-16} \def\dateB{2021-06-01}
\isisodatebeforeTF{\dateA}{\dateB}{Yes}{No}
\isisodatebeforeTF{\dateB}{\dateA}{Yes}{No}
\isisodatebeforeTF{\dateA}{\dateA}{Yes}{No}
\end{document}