Conversión de signos de longitud en modo matemático

Conversión de signos de longitud en modo matemático

Estoy configurando un documento que genera una ecuación, con algunas partes mostrándose o no dependiendo de los comandos que configuré en un archivo diferente.

los comandos se ven así:

\newcommand\coefficient{1.25}

Quiero que este coeficiente se muestre en la ecuación si es distinto de cero y no es 1 o -1. Si es positivo, debería generar -1,25 (cambio de signo). Hasta ahora lo estoy haciendo así:

\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}

Lo que esto hace es mostrar el valor cuando no es 0, 1 o -1, mostrar un - si es -1 y no mostrar la parte x(k-1) en caso de que el valor sea 0.

Ahora, para mi ecuación, me gustaría cambiar el signo para que cada valor positivo definido en el comando salga como negativo en la ecuación y cada valor negativo salga como positivo (lo cual es más difícil).

¿Cómo puedo hacer esto (preferiblemente sin utilizar paquetes adicionales)?

Respuesta1

Aquí tienes una solución que hace lo que quieres. Desafortunadamente, no es posible hacer cálculos de punto flotante con un esquema de entrada sensato sin cargar un paquete, por lo que este comando no puede hacer ninguna aritmética.

\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} 

Respuesta2

podríahacerlo sin paquetes adicionales, pero ¿por qué?

\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}

La *versión -es para imprimir el primer coeficiente: si es positivo, +se debe omitir el signo.

ingrese la descripción de la imagen aquí

información relacionada