拥有引用命令

拥有引用命令

我想创建一个与原始命令非常相似的引用命令:

\newcommand{\mycite}[2][]{\hspace{30pt}\cite{#2}{#1}}

问题是,当我只写\mycite{test}。那么就会有

[测试, ]

但它应该是

[测试]

因为我省略了可选参数。我尝试使用包xparse。但是使用以下代码我得到了相同的结果

\NewDocumentCommand\mycite{O{}m}{%
  \cite[#1]{#2}%
}

我做错了什么?你能帮助我吗?

答案1

没有检查 的可选参数是否\mycite存在。因此\mycite{#2}仍将使用 的\cite[]{#2}空可选参数进行调用\cite,这意味着,在列表中进行排版。

我添加了“传统”方法来检查可选参数和xparse方法(更容易!)

笔记:参考书目相关软件包可能已经更改了\cite命令。本文不涉及此内容。

\documentclass{article}

\usepackage{etoolbox}
\usepackage{xparse}

\makeatletter

\newcommand{\@myotherciteopt}[2][]{%
  \hspace{30pt}%
  \ifblank{#1}{%
    \cite{#2}%
  }{%
    \cite[#1]{#2}%
  }%
}

\newcommand{\@myothercitenoopt}[1]{%
  \@myotherciteopt[]{#1}%
}

\newcommand{\myothercite}{%
  \@ifnextchar[{\@myotherciteopt}{\@myothercitenoopt}%
}

\makeatother

\NewDocumentCommand\mycite{om}{%
  \hspace{30pt}%
  \IfValueTF{#1}{%
    \cite[#1]{#2}%
  }{%
    \cite{#2}%
  }%
}


\begin{document}

\mycite{Lam94}

\myothercite{Lam94}

Now with options:

\mycite[Ms. Ann Elk]{Lam94}

\myothercite[Ms. Ann Elk]{Lam94}

\bibliographystyle{alpha}

\bibliography{biblio}

\end{document}

在此处输入图片描述

相关内容