带有可选参数的 LaTeX 命令将参数括在括号中

带有可选参数的 LaTeX 命令将参数括在括号中

我想定义以下 LaTeX 命令

\newcommand{\cost}[1][]{
   \ifthenelse{\isempty{#1}}
     {c_N}
     {c_N((#1))}
  }

其中,参数#1在输出中括在括号 ( ) 中。不幸的是,LaTeX 输出会隐藏括号。如何让 LaTeX 不隐藏参数周围的括号?

答案1

尝试

\documentclass{article}

\usepackage{xifthen}
\begin{document}
    
    \newcommand{\cost}[1][]{
        \ifthenelse{\isempty{#1}}
        {$c_N$}
        {$c_{N(#1)}$}% with single parenthesis to the output
    }
    
    \cost  %no output
    
    \cost[] % no output
    
    \cost[x]
    
\end{document}

缺少$...$使用内联数学模式的功能。

X

答案2

\documentclass{article}
\newcommand\cost[1][]{%
  \ensuremath{\if$#1$ c_N\else c_{N(#1)}\fi}}

\begin{document}    
    
$\cost$       \cost 
    
$\cost[]$     \cost[]    

$\cost[x]$    \cost[x]
    
\end{document}

在此处输入图片描述

答案3

当我做

\documentclass{article}
\usepackage{xifthen}
\newcommand{\cost}[1][]{\ifthenelse{\isempty{#1}}{c_N}{c_N((#1))}}
\begin{document}
    
    $\cost$  %no output
    
    $\cost[]$ % no output
    
    $\cost[x]$

    $\cost[\empty]$

\end{document}

,然后我得到:

在此处输入图片描述

\cost如您所见,如果#1不为空但包含一些标记,则会出现两层括号。


可能不是关于抑制括号而是关于在下标中使用括号?

\documentclass{article}
\newcommand{\cost}[1][]{c_{N\ifthenelse{\isempty{#1}}{}{(#1)}}}%
\usepackage{xifthen}
\begin{document}
    
    $\cost$  %no output
    
    $\cost[]$ % no output
    
    $\cost[x]$

    $\cost[\{x\}]$

    $\cost[\empty]$
    
\end{document}

在此处输入图片描述


可能不是关于括号而是关于花括号?

(我推测这是因为在收集宏参数的过程中,围绕整个可选参数/整个(]-)分隔参数的一层花括号被剥离,即$\cost[x]$产生与 相同的结果$\cost[{x}]$

除此之外,第 1 类(开始组)/第 2 类(结束组)的花括号会影响 TeX 运行时事物的处理/分组/范围,但不会产生在生成的 PDF 文件中可见的符号/字符。)

如果是这样,那么您可以执行\{/\}\left\{/ \right\}

\documentclass{article}
\newcommand{\cost}[1][]{c_{N\ifthenelse{\isempty{#1}}{}{\{(#1)\}}}}%
\usepackage{xifthen}
\begin{document}
    
    $\cost$  %no output
    
    $\cost[]$ % no output
    
    $\cost[x]$

    $\cost[\empty]$
    
\end{document}

在此处输入图片描述

相关内容