\newcommand 有一些空的输入 - 不需要的空间

\newcommand 有一些空的输入 - 不需要的空间

\Opt是一个由 5 个元素组成的向量

在此处输入图片描述

但有些可以留空。

在此处输入图片描述

基于这个很好的答案我学习了如何测试一个参数是否为空。

但正如你在我的 MWE 中看到的,我在处理空格方面遇到了困难。我手动添加了一个额外的空格,\Opt{EMTN }{SPX }{jun }{ATM }{C}但毫无疑问,当参数为空时,有一个自动答案可以避免双倍空格,并更和谐地显示元素。

在此处输入图片描述

\documentclass{article}

\usepackage{xcolor}

\newcommand{\Opt}[5]{%
{\color{blue!80}% 
     \if\relax\detokenize{#1}\relax\else\texttt{#1}\fi
} %I get a legit double space here if no %
{\color{orange!80!black} 
    \if\relax\detokenize{#2}\relax\else\texttt{#2}\fi 
    \if\relax\detokenize{#3}\relax\else\texttt{#3}\fi
    \if\relax\detokenize{#4}\relax\else\texttt{#4}\fi
    \if\relax\detokenize{#5}\relax\else\texttt{#5}\fi
}
}


\begin{document}

\Opt{EMTN }{SPX }{}{}{C}

\Opt{EMTN }{SPX }{jun }{ATM }{C}

\Opt{EMTN}{SPX}{}{}{C}

\Opt{FUND}{AAPL}{jun}{OTM}{C}

\Opt{FUND }{AAPL }{jun }{OTM }{C}

\Opt{}{SPX }{}{}{Put}

\end{document}

答案1

您可以在最后一个参数后添加空格\textt{#? }并执行:\unskip

\def\Opt#1#2#3#4#5{%
   {\color{blue!80}% 
       \if\relax\detokenize{#1}\relax\else\texttt{#1 }\fi
   }%  I get a legit double space here if no %
   {\color{orange!80!black}% 
    \if\relax\detokenize{#2}\relax\else\texttt{#2 }\fi 
    \if\relax\detokenize{#3}\relax\else\texttt{#3 }\fi
    \if\relax\detokenize{#4}\relax\else\texttt{#4 }\fi
    \if\relax\detokenize{#5}\relax\else\texttt{#5 }\fi
   }%
   \unskip
}

测试:

\Opt{EMTN}{SPX}{}{}{C}

\Opt{EMTN}{SPX}{jun}{ATM}{C}

\Opt{EMTN}{SPX}{}{}{C}

\Opt {EMTN} {SPX} {jun} {ATM} {C}

相关内容