当定制引用命令中的参数为空时删除空格

当定制引用命令中的参数为空时删除空格

我正在尝试定义一个定制的引用命令,该命令模仿\citep[][]{}当我使用某些引用别名的情况的行为,例如当作者是一个机构并且我想要它的首字母缩写词时。

我的问题是,当没有文本时引用,Latex 仍然在年份和右括号之间显示空格。我尝试定义一个\checkEmpty基于这个帖子但无济于事。

我的代码如下:

\documentclass{article}

\usepackage[]{natbib}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}

\defcitealias{BCBS2011}{BCBS}
\newcommand{\checkEmpty}[1]{
    \if\relax\detokenize{#1}\relax{\ignorespaces}\else{#1}\fi
}
\newcommand{\mycitepalias}[3]{
    \citepalias[#2][\citeyear{#1}\checkEmpty{#3}]{#1}
}

\begin{document}

\noindent%
\mycitepalias{BCBS2011}{}{}\\
\mycitepalias{BCBS2011}{with text before}{}\\
\mycitepalias{BCBS2011}{with text before}{and after}
\bibliography{bibliography.bib}

\end{document}

输出如下所示。如您在第一行和第二行中看到的那样,有一个不需要的空格。

在此处输入图片描述

附言:作为奖励,如果引用后有文字,我想在日期后添加一个逗号。

答案1

您的{\ignorespaces}操作不执行任何操作,因为\ignorespaces无论如何后面都是}。但这仍然无关紧要。

您通过不保护端线来添加空格。

\begin{filecontents*}{\jobname.bib}
@misc{BCBS2011,
  author={{Basel Committee on Bank Supervision}},
  title={Basel {III}: {A} global regulatory framework for
         more resilient banks and banking system},
  year=2011,
}
\end{filecontents*}

\documentclass{article}

\usepackage[]{natbib}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}

\defcitealias{BCBS2011}{BCBS}
\newcommand{\checkEmpty}[1]{%
  \if\relax\detokenize{#1}\relax
  \else
    \ #1%
  \fi
}
\newcommand{\mycitepalias}[3]{%
    \citepalias[#2][\citeyear{#1}\checkEmpty{#3}]{#1}%
}

\begin{document}

\mycitepalias{BCBS2011}{}{}

\mycitepalias{BCBS2011}{with text before}{}

\mycitepalias{BCBS2011}{with text before}{and after}

\bibliographystyle{plainnat}
\bibliography{\jobname}

\end{document}

在此处输入图片描述

相关内容