오일러와 빼기 기호

오일러와 빼기 기호

인수에 빼기 기호가 있든 없든 오일러 복소수 e-power를 조판하는 매크로를 정의하려고 합니다. 인수가 로 시작하는지 매크로가 자동으로 감지하도록 하고 싶습니다 -. 선택적 인수를 사용하는 다음 MWE가 있습니다.

\documentclass[a4paper,12pt,fleqn]{article}

\def\imaginaryunit{j}                  % the imaginary unit, i for mathematician and theoretical physicist, j for the rest of the world.
\def\imunit{\mathrm{\imaginaryunit}}   % ... in upright math
\def\ce{\mathrm{e}}                    % the constant e, upright of course
\makeatletter
\def\epowim{\@ifnextchar[{\epowimi}{\epowimi[]}}       % e to-the-power-of imaginary unit
\def\epowimi[#1]#2{\ce^{#1\if\imaginaryunit j\relax\,\fi\imunit#2}}       % e to-the-power-of imaginary unit
\makeatother

\begin{document}

\begin{equation}
\epowim{\alpha}\qquad \epowim[-]{\alpha} \qquad \ce^{-\imunit\alpha}
\end{equation}

\end{document}

그래서 인수가 다음으로 시작하는지 감지하는 매크로를 원합니다 -.

\epowim{-\alpha}

-가상 단위 뒤에 배치하는 대신 를 감지하여 가상 단위 앞에 배치해야 합니다 .

그래서 문제는 그것이 이루어질 수 있는지, 그리고 어떻게 이루어질 수 있는지입니다.

답변1

이 같은?

\documentclass[a4paper,12pt,fleqn]{article}
\def\imaginaryunit{j}                  % the imaginary unit, i for mathematician and theoretical physicist, j for the rest of the world.
\def\imunit{\mathrm{\imaginaryunit}}   % ... in upright math
\def\ce{\mathrm{e}}                    % the constant e, upright of course
\newcommand\epowim[1]{\ce^{\epowimaux#1\relax\endep}}
\def\epowimaux#1#2\endep{\ifx-#1\relax-\imunit\else%
  \if j\imaginaryunit\relax\,\fi\imunit#1\fi#2}
\begin{document}
\[
\epowim{\alpha}\qquad \epowim{-\alpha} \qquad \ce^{-\imunit\alpha}
\]
\[
\epowim{x+t}\quad\epowim{-x+t}\quad\epowim{-}\quad\epowim{}
\]
\def\imaginaryunit{i}
\[
\epowim{\alpha}\qquad \epowim{-\alpha} \qquad \ce^{-\imunit\alpha}
\]
\[
\epowim{x+t}\quad\epowim{-x+t}\quad\epowim{-}\quad\epowim{}
\]
\end{document}

여기에 이미지 설명을 입력하세요

답변2

피하면 \def인생이 더 쉬워질 것입니다.

당신은 다음에 대해 알고 있는 것 같습니다 \@ifnextchar:

\documentclass[a4paper,12pt,fleqn]{article}

% the imaginary unit, j for engineers and i for the rest of the world
\newcommand\imaginaryunit{j}
% in upright type as engineers do; also Euler's constant
\newcommand\imunit{\mathrm{\imaginaryunit}}
\newcommand\ce{\mathrm{e}}

\newcommand{\fiximunit}{\if\imaginaryunit j\,\fi}

\makeatletter
\newcommand{\epowim}[1]{\ce^{\epowim@#1}}
\newcommand{\epowim@}{\@ifnextchar-{\epowim@@}{\epowim@@{\fiximunit}}}
\newcommand{\epowim@@}[1]{#1\imunit}
\makeatother

\begin{document}

\begin{equation}
\epowim{\alpha}\qquad \epowim{-\alpha} \qquad \ce^{-\imunit\alpha}
\qquad \epowim{} \qquad \epowim{-}
\end{equation}

\end{document}

설명: 발견 \@ifnextchar-되면 다음 인수를 사용하고 -그렇지 않으면 후속 인수를 사용하지만없이. -​따라서 -호출되면 결과는 다음과 같습니다.

\epowim@@-\alpha

-에 인수로 전달됩니다 \epowim@@. 그렇지 않으면 인수로 \epowim@@호출됩니다 .\fiximunit

이는 각각 e j 및 e −j\epowim{} 와 함께 또는 조판하는 데 실패하지 않습니다 .\epowim{-}

아마도 다음을 사용하여 더 간단하게 구현할 수 있습니다 xparse.

\documentclass[a4paper,12pt,fleqn]{article}

\usepackage{xparse}

% the imaginary unit, j for engineers and i for the rest of the world
\newcommand\imaginaryunit{j}
% in upright type as engineers do; also Euler's constant
\newcommand\imunit{\mathrm{\imaginaryunit}}
\newcommand\ce{\mathrm{e}}

\newcommand{\fiximunit}{\if\imaginaryunit j\,\fi}

\NewDocumentCommand{\epowim}{m}{\ce^{\powim#1}}
\NewDocumentCommand{\powim}{t-}{\IfBooleanTF{#1}{-\imunit}{\fiximunit\imunit}}

\begin{document}

\begin{equation}
\epowim{\alpha}\qquad \epowim{-\alpha} \qquad \ce^{-\imunit\alpha}
\qquad \epowim{} \qquad \epowim{-}
\end{equation}

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보