我正在设置一个输出方程式的文档,其中某些部分显示或不显示取决于我在不同文件中设置的命令。
命令如下:
\newcommand\coefficient{1.25}
我希望这个系数在等式中显示出来,如果它不为零,而不是 1 或 -1。如果它是正数,它应该输出为 -1.25(改变符号)。到目前为止,我是这样做的:
\documentclass[border=10pt,convert={density=300,size=1080x800,outext=.png}]{standalone}
\input{coefficients.tex}
\usepackage{amsmath}
\begin{document}
$\displaystyle
y(k) =
\ifdim\dimexpr\coefficient pt =0pt
\else
\ifdim\dimexpr\coefficient pt >0pt
+
\else
\fi
\ifdim\dimexpr\coefficient pt=1pt
\else
\ifdim\dimexpr\coefficient pt=-1pt
-
\else
\coefficient
\fi
\fi
x(k-1)
\fi
+ 5
$
\end{document}
这样做的目的是,当值不是 0、1 或 -1 时显示该值,如果是 -1 则显示 -,如果值为 0 则不显示 x(k-1) 部分。
现在对于我的方程,我想改变符号,以便命令中定义的每个正值在方程中输出为负值,而每个负值输出为正值(这更难)。
我怎样才能做到这一点(最好不使用额外的包)?
答案1
这是一个可以满足您的要求的解决方案。遗憾的是,如果不加载包,就无法使用合理的输入方案进行浮点运算,因此此命令无法进行任何算术运算。
\documentclass{article}
\makeatletter
\def\printcoefficient#1#2{%
\ifdim\dimexpr#1pt=0pt\else
\ifdim\dimexpr#1 pt >0pt%
+%
\fi
\ifdim\dimexpr#1pt=1pt\else
\ifdim\dimexpr#1pt=-1pt%
-%
\else
\expandafter\pc@removepoint\the\dimexpr#1pt%
\fi
\fi
#2%
\fi
}
\def\printnegativecoefficient#1{\printcoefficient{-#1}}
\begingroup\lccode`8=`p\lccode`9=`t\lowercase{\endgroup
\def\pc@removepoint#189{#1}
}
\makeatother
\begin{document}
$1\printcoefficient{0}{x}$
$1\printcoefficient{1}{x}$
$1\printcoefficient{2}{x}$
$1\printcoefficient{-1}{x}$
$1\printcoefficient{-1.2}{x}$
$1\printcoefficient{1.2}{x}$
$1\printnegativecoefficient{0}{x}$
$1\printnegativecoefficient{1}{x}$
$1\printnegativecoefficient{2}{x}$
$1\printnegativecoefficient{-1}{x}$
$1\printnegativecoefficient{-1.2}{x}$
$1\printnegativecoefficient{1.2}{x}$
\end{document}
答案2
你可以不需要额外的软件包就可以做到,但是为什么呢?
\documentclass[border=10pt]{standalone}
\usepackage{amsmath}
\usepackage{xfp} % also loads expl3
\ExplSyntaxOn
\NewExpandableDocumentCommand{\cf}{sm}
{
\fp_compare:nF { #2 < \c_zero_fp } { \IfBooleanF { #1 } { + } }
\fp_compare:nF { #2 = \c_one_fp }
{
\fp_compare:nTF { #2 = -\c_one_fp }
{ - }
{ #2 }
}
}
\ExplSyntaxOff
\newcommand{\constA}{-2.5}
\newcommand{\constB}{1.35}
\newcommand{\constC}{1}
\newcommand{\constD}{-1}
\begin{document}
$\displaystyle
y(k) =
\cf{\constA}x(k-1)
\cf{\constB}x^2
\cf{\constC}x^3
\cf{\constD}x^4
\qquad
z(k) =
\cf*{\constC}{x^3}
$
\end{document}
-version*
用于打印第一个系数:如果为正数,+
则应省略符号。