我尝试在字符串包含或不包含“,”的情况下打印两个不同的文本。条件有效,但打印的文本没有空格。
这是该命令的代码:
\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}
两个示例都产生: