Преобразование знака длины в математическом режиме

Преобразование знака длины в математическом режиме

Я создаю документ, который выводит уравнение, некоторые части которого отображаются или не отображаются в зависимости от команд, которые я задал в другом файле.

команды выглядят так:

\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, и не отображает часть x(k-1), если значение равно 0.

Теперь для моего уравнения я хотел бы изменить знак так, чтобы каждое положительное значение, определенное в команде, выводилось как отрицательное в уравнении, а каждое отрицательное значение выводилось как положительное (что сложнее).

Как это сделать (желательно без использования дополнительных пакетов)?

решение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}

Версия *- предназначена для печати первого коэффициента: если он положительный, знак +следует опустить.

введите описание изображения здесь

Связанный контент