我想检查参数的值是否为负数。如果参数为负数,我想减去 0.5;如果参数为正数,我想加 0.5。
我能做的最好的就是像这样定义新变量
\ifnum#1<0 \def\xa{#1-0.5} \else \def\xa{#1+0.5}\fi
但这不起作用。在没有外部库的情况下,可以在 plan tex/latex 中做到这一点吗?
编辑:由于 #1 恰好是整数,因此可行\def\xa{#1.5}
。但是,如果我想添加怎么办1.5
?
答案1
(发现它太长,不适合发表评论,所以我发布了这条评论)
要添加可能带有小数的一般数字,您需要
- 附加
pt
到每个数字 - 用来
\the\dimexpr
进行计算,并返回一个维度 - 定义一个宏来去除尾随
pt
,例如\pgf@sys@tonumber
在pgf
和\strip@pt
在 latex2e 中。
% pgf, pgfsys.code.tex
{\catcode`\p=12\catcode`\t=12\gdef\Pgf@geT#1pt{#1}}
\def\pgf@sys@tonumber#1{\expandafter\Pgf@geT\the#1}
% latex2e, ltfssbas.dtx
% bonus: this also simplify 1.0pt to 1, not 1.0
\begingroup
\catcode`P=12
\catcode`T=12
\lowercase{
\def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}
\expandafter\endgroup\x
\def\strip@pt{\expandafter\rem@pt\the}
综合以上所有因素,
\documentclass{article}
\makeatletter
\newcommand{\addnum}[2]{\expandafter\strip@pt\dimexpr#2pt+#1pt\relax}
\makeatother
\begin{document}
\addnum{1}{1.3}
\addnum{1}{-1.3}
\end{document}
输出
2.3 -0.3
答案2
评论太长了。正如原始问题的评论中提到的那样,您只需附加到.5
。\xa
对于扩展问题,您可以使用\the\numexpr
它来添加整数。(如果您想添加非整数,您可以使用维度,但xfp
在这种情况下使用它可能更有意义。)宏\mytest
指的是原始问题,\anothertest
指的是您想要添加/减去的情况1.5
,并\generaltest
允许您按一般整数移动,这是可选参数,其默认值为1
。
\documentclass{article}
\newcommand{\mytest}[1]{\edef\xa{#1.5}}
\newcommand{\anothertest}[1]{\ifnum#1<0\relax
\edef\xa{\the\numexpr#1-1}%
\else
\edef\xa{\the\numexpr#1+1}%
\fi
\edef\xa{\xa.5}}
\newcommand{\generaltest}[2][1]{\ifnum#2<0\relax
\edef\xa{\the\numexpr#2-#1}%
\else
\edef\xa{\the\numexpr#2+#1}%
\fi
\edef\xa{\xa.5}}
\begin{document}
\mytest{2}\xa
\mytest{-4}\xa
\anothertest{2}\xa
\anothertest{-4}\xa
\generaltest[1]{2}\xa
\generaltest[1]{-4}\xa
\generaltest[2]{2}\xa
\generaltest[6]{-4}\xa
\end{document}
答案3
问题主要在于你使用的是小数。在 (La)TeX 中处理小数的典型方式是将它们视为维度。因此,不要2.5
(比如说),而是使用2.5pt
。但是,这种方法有点麻烦。
你可以依赖三元运算符xfp
它求值 acondition
并分支求值 或true
,false
具体取决于condition
。具体来说,它具有以下格式:
条件 ? true : false
由于\fpeval
(对于f
浮点p
操作)是可扩展的,因此您可以使用它来定义一些基于计算的宏:
\documentclass{article}
\usepackage{xfp}
\newcommand{\addnum}[1]{%
% <cond> ? <true> : <false>
\edef\xa{\fpeval{#1 < 0 ? #1 - 0.5 : #1 + 0.5}}%
}
\begin{document}
\addnum{2}$\xa$% 2 + 0.5 = 2.5
\addnum{-1}$\xa$% -1 - 0.5 = -1.5
\addnum{3.141}$\xa$% 3.141 + 0.5 = 3.641
\addnum{-2.718}$\xa$% -2.718 - 0.5 = -3.218
\end{document}