带有可选第二个参数的自定义引用

带有可选第二个参数的自定义引用

我希望我的命令citat能够给出引文作者,后面是括号中的引文文档,以及可选的任何其他参数以配合文档年份。我尝试了以下方法

\newcommand{\citeat}[2]{\citeauthor{#1} (\citeyear[#2]{#1})}

这样在我的主文档中我可以调用类似

\citeat[p. 92]{Harris1979}

答案1

我不确定您为什么想要一个新命令,因为您可以通过标准命令\citet(的natbib)获得该行为。

无论如何,我为你的\citeat命令添加了一个定义。filecontents环境只是为了使示例自成一体。

\begin{filecontents*}{\jobname.bib}
@article{test,
 author={A. Uthor},
 title={Title},
 journal={Journal},
 year=2017,
}
\end{filecontents*}

\documentclass{article}
\usepackage[authoryear,round]{natbib}

\newcommand{\citeat}[2][]{%
  \citeauthor{#2}%
  \if\relax\detokenize{#1}\relax
    ~(\citeyear{#2})%
  \else
    ~(\citeyear[#1]{#2})%
  \fi
}

\begin{document}
\raggedright

No optional argument: \citeat{test}

Optional argument: \citeat[p.~92]{test}

Standard without optional argument: \citet{test}

Standard with optional argument: \citet[p.~92]{test}

\bibliographystyle{plainnat}
\bibliography{\jobname}

\end{document}

在此处输入图片描述

使用biblatex,标准命令\textcite可以执行您想要的操作。

\begin{filecontents*}{\jobname.bib}
@article{test,
 author={A. Uthor},
 title={Title},
 journal={Journal},
 year=2017,
}
\end{filecontents*}

\documentclass{article}
\usepackage[style=authoryear]{biblatex}

\addbibresource{\jobname.bib}

\begin{document}
\raggedright

Standard without optional argument: \textcite{test}

Standard with optional argument: \textcite[92]{test}

\printbibliography

\end{document}

在此处输入图片描述

答案2

答案是

 \newcommand{\citeat}[2][ ]{ \citeauthor{#2} (\citeyear[#1]{#2}) }

相关内容