条件句中缺少空格

条件句中缺少空格

我尝试在字符串包含或不包含“,”的情况下打印两个不同的文本。条件有效,但打印的文本没有空格。

这是该命令的代码:

\NewDocumentCommand {\dayeach} { O{} m}
  {
      \IfInteger{#1}
      {
        \IfSubStr{#2}{,}
            {#1 /day each:}
            {#1 /day}
      }
      {#1}
      %end if%
      {#2}

  }

这是我如何称呼它的一个例子:

\dayeach[3]{drink, eat}

我得到了:

“每天 3 次:喝,吃”

答案1

您正在使用expl3语法。毕竟\ExplSyntaxOn空格被忽略,直到\ExplSyntaxOff。内部\ExplSyntaxOn空格是用 产生的~,因此您需要使用其中一些:

\documentclass{article}
\usepackage{xparse}
\usepackage{xstring}
\ExplSyntaxOn
\NewDocumentCommand \dayeach { O{} m }
  {
    \IfInteger{#1}
      {
        \IfSubStr{#2}{,}
          {#1 /day~each:~}
          {#1 /day~}
      }
      {#1}
      {#2}
  }
\ExplSyntaxOff
\begin{document}
\dayeach[3]{drink, eat}

\dayeach[3]{sleep}
\end{document}

但是,既然您无论如何都要使用expl3,我建议使用expl3的函数而不是xstring的函数:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \dayeach { O{} m }
  {
    \IfInteger{#1}
      {
        \str_if_in:nnTF {#2} {,}
          {#1 /day~each:~}
          {#1 /day~}
      }
      {#1}
      {#2}
  }
\NewExpandableDocumentCommand \IfInteger { m m m }
  { \xhark_if_integer:nTF {#1} {#2} {#3} }
\prg_new_conditional:Npnn \xhark_if_integer:n #1 { p, T, F, TF }
  {
    \tl_if_empty:fTF
      { \int_to_roman:n { -0#1 } }
      { \prg_return_true: }
      { \prg_return_false: }
  }
\cs_generate_variant:Nn \tl_if_empty:nTF { f }
\ExplSyntaxOff
\begin{document}
\dayeach[3]{drink, eat}

\dayeach[3]{sleep}
\end{document}

两个示例都产生:

在此处输入图片描述

相关内容