
我正在設定一個輸出方程式的文檔,其中某些部分顯示或不顯示取決於我在不同文件中設定的命令。
命令如下圖所示:
\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*
用於列印第一個係數:如果它是正數,+
則應省略符號。