比较字符串(标记列表),在前,在后

比较字符串(标记列表),在前,在后

如何比较两个字符串(标记列表)?我想知道是否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}

在此处输入图片描述

相关内容