我编写了一个需要几分钟的命令,其格式如下: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}