數學模式下的長度符號轉換

數學模式下的長度符號轉換

我正在設定一個輸出方程式的文檔,其中某些部分顯示或不顯示取決於我在不同文件中設定的命令。

命令如下圖所示:

\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*用於列印第一個係數:如果它是正數,+則應省略符號。

在此輸入影像描述

相關內容