为什么我的命令会产生空格?

为什么我的命令会产生空格?

我编写了一个需要几分钟的命令,其格式如下:Xh Xmin。

该命令的逻辑运行良好,但如果我将其与其他命令或自身结合使用,它会在文本前面产生不必要的间距。

命令

\newcommand{\timeFormat}[1]
{
\def\hours{}
\def\minutes{}
\IfInteger{#1}
{
    \ifnum\intcalcDiv{#1}{60} > 0
        \appto\hours{\intcalcDiv{#1}{60}}
    \fi
    \ifnum\intcalcMod{#1}{60} > 0
        \appto\minutes{\intcalcMod{#1}{60}}
    \fi
    \ifthenelse{\equal{\hours}{}}
    {\ifthenelse{\equal{\minutes}{}}
        {}
        {\minutes min}}
    {\ifthenelse{\equal{\minutes}{}}
        {\hours h}
        {\hours h \minutes min}}
}{}
}

依赖项

\usepackage{intcalc}
\usepackage{xstring}

用法

\timeFormat{100}\timeFormat{1}\timeFormat{60}

结果

输出

到目前为止,我还没想出如何消除间距,而且我已经没有主意了。
我该如何解决这个问题?

答案1

几乎代码中的每一行末尾都会添加一个空格。

\newcommand{\timeFormat}[1]
{%
  \def\hours{}%
  \def\minutes{}%
  \IfInteger{#1}
   {%
    \ifnum\intcalcDiv{#1}{60} > 0
        \appto\hours{\intcalcDiv{#1}{60}}%
    \fi
    \ifnum\intcalcMod{#1}{60} > 0
        \appto\minutes{\intcalcMod{#1}{60}}%
    \fi
    \ifthenelse{\equal{\hours}{}}
      {\ifthenelse{\equal{\minutes}{}}
        {}
        {\minutes min}}%
      {\ifthenelse{\equal{\minutes}{}}
        {\hours h}
        {\hours h \minutes min}}%
   }{}%
}

在必需常量之后以及寻找参数时,空格会被忽略。

有了xparse它,就expl3无需担心空间了。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\timeFormat}{m}
 {
  \clutch_time_format:n { #1 }
 }
\int_new:N \l_clutch_time_hour_int
\int_new:N \l_clutch_time_min_int

\cs_new_protected:Nn \clutch_time_format:n
 {
  \int_set:Nn \l_clutch_time_hour_int
   {
    \int_div_truncate:nn { #1 } { 60 }
   }
  \int_set:Nn \l_clutch_time_min_int
   {
    \int_mod:nn { #1 } { 60 }
   }
  \int_compare:nT { \l_clutch_time_hour_int > 0 }
   {
    \int_to_arabic:n { \l_clutch_time_hour_int }\,h
    \int_compare:nT { \l_clutch_time_min_int > 0 }
     {
      \nobreakspace
     }
   }
  \int_compare:nT { \l_clutch_time_min_int > 0 }
   {
    \int_to_arabic:n { \l_clutch_time_min_int }\,min
   }
 }
\ExplSyntaxOff

\begin{document}

---\timeFormat{100}---

---\timeFormat{1}---

---\timeFormat{60}---

\end{document}

在此处输入图片描述

相关内容