我正在尝试定义一个定制的引用命令,该命令模仿\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}