如何将新命令中的可选空参数传递给 LaTeX 中具有可选空参数的另一个命令?

如何将新命令中的可选空参数传递给 LaTeX 中具有可选空参数的另一个命令?

我想定义一个newcommand带有两个可选参数的命令,它反过来调用另一个带有两个可选参数的命令。

类似以下内容(\B调用\A)。我该怎么做?

\newcommand{A}[3][][]{{#1 + #2 + #3}}
\newcommand{B}[3][][]{#1 + \A[#2][#3]{#1}}

\B{9}
\B[1][]{9}
\B[][3]{9}
\B[1][3]{9}

编辑

我试图给出类似的 MWE,但我担心上述示例实际上可能无法正确传达我的需要。

我之所以有这个问题,是为了创建一个命令,该命令接收某个 bib-item 并突出显示它。我想通过 newcommand向\parencite[pre][post]{#1}(其中pre和可以为空) 传递两个可选参数。然后该命令将突出显示参考文献。post\hlcite[pre][post]{#1}\hlcite

\usepackage{graphicx, color}
\usepackage[dvipsnames]{xcolor}
\usepackage{bookmark}
\usepackage[
    backend=biber,          % backend: biber
    style=authoryear,       % style: numeric-comp, authoryear
    sorting=ynt,            % sorting: none, ynt
]{biblatex}
\usepackage{soul} 
\newcommand{\hlc}[2][yellow]{\sethlcolor{#1} \hl{#2}}
%% This works
\newcommand{\hlcite}[1]{\colorbox[green]{\mbox{\parencite{#1}}}}
%% But this throws error
\newcommand{\hlcite}[3]{\hlc[green]{\mbox{\parencite[#2][#3]{#1}}}}

参考

添加可选参数

非 stackoverflow/stackexchange 链接:

在 Latex 中使用 if 条件:

\mbox用于突出显示的参考资料\cite\parencite内部参考资料\newcommand

在 Latex 中突出显示文本:

答案1

您可以使用\NewDocumentCommand

\NewDocumentCommand{\hlc}{O{yellow}m}{\sethlcolor{#1}\hl{#2}}

\NewDocumentCommand{\hlcite}{oom}{%
  \hlc[green]{%
    \IfNoValueTF{#1}{% no optional argument
      \parencite{#3}%
    }{%
      \IfNoValueTF{#2}{% just one optional argument
        \parencite[#1]{#3}%
      }{% both optional arguments
        \parencite[#1][#2]{#3}%
      }%
    }%
  }% end of \hlc
}

请注意,您不希望\sethlcolor{#1}ad之间有空格\hl{#2}

答案2

也许是这样的?使用\newcommand,如果希望吸收两个可选参数,则必须连续使用至少两个命令。

\documentclass{article}
\newcommand\A[1][0]{\def\Atmp{0#1}\Ahelp}
\newcommand\Ahelp[2][0]{\expandafter\Axhelp\expandafter{\Atmp}{0#1}{#2}}
\newcommand\Axhelp[3]{\the\numexpr#1 + #2 + #3\relax}
\newcommand\B[1][0]{\def\Btmp{0#1}\Bhelp}
\newcommand\Bhelp[2][0]{\expandafter\Bxhelp\expandafter{\Btmp}{0#1}{#2}}
\newcommand\Bxhelp[3]{\the\numexpr#1 + \Axhelp{#2}{#3}{#1}\relax}
\begin{document}

\B{9}

\B[1][]{9}

\B[][3]{9}

\B[1][3]{9}

\end{document}

在此处输入图片描述

\B命令可以更简单地实现

\NewDocumentCommand\B{ O{0} O{0} m }{\the\numexpr#1 + \Axhelp{0#2}{#3}{0#1}\relax}

然而,情况并非如此,\A因为\Ahelp在本例中是可扩展的,而\A通过定义的\NewDocumentCommand却不可扩展。

相关内容