我希望我的命令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}) }