\citep{}
我怎样才能更改引文中作者姓名的字体样式\textsc
?
我尝试将命令更改\citep
为\textsc{\citep}
(参见 MWE)。但这当然会给多位作者带来问题,因为我也不想在 \textsc 中打印任何“and”。
但是必须有一种方法来引用作者姓名,类似于\bibfont
引用参考书目的字体样式。
我阅读了 natbib 文档并搜索了这个论坛。类似的问题仅集中在 biblatex 包上。但是,假设我不想更改包。
注意:这与以下问题不同: 格式化 natbib 字体样式 (这是关于参考书目中的字体样式):
梅威瑟:
\documentclass[]{scrartcl}
\usepackage[authoryear,sort]{natbib}
\usepackage{filecontents}
\begin{filecontents}{bib.bib}
@artice{who,
author={Dr Who},
title={said that},
year={2017}
}
@artice{no,
author={Dr No},
title={said otherwise},
year={2017}
}
\end{filecontents}
\begin{document}
\makeatletter
\renewcommand{\cite}[1]{\textsc{\citeauthor{#1}} (\citeyear{#1})}
\renewcommand{\citep}[1]{(\textsc{\citeauthor{#1}} \citeyear{#1})}
\makeatother
I say this \citep{who,no}.
\cite{who} said that.
\bibliographystyle{dinat}
\bibliography{bib}
\end{document}
答案1
看来该natbib
包使用宏\NAT@nmfmt
来格式化文内引用中的作者姓名。我们可以重新定义它以使用小写字母。
\documentclass[]{scrartcl}
\usepackage[authoryear,sort]{natbib}
\usepackage{filecontents}
\makeatletter
\def\NAT@nmfmt#1{\textsc{#1}}
\makeatother
\begin{filecontents}{bib.bib}
@artice{who,
author={Dr Who},
title={said that},
year={2017}
}
@artice{no,
author={Dr No},
title={said otherwise},
year={2017}
}
\end{filecontents}
\begin{document}
I say this \citep{who,no}.
\cite{who} said that.
\bibliographystyle{dinat}
\bibliography{bib}
\end{document}
请注意,此重新定义将阻止 natbib 的包选项nonamebreak
工作。该选项的效果应通过以下方式获得
\makeatletter
\def\NAT@nmfmt#1{\mbox{\textsc{#1}}}
\makeatother
而不是上面的重新定义。
请注意,我仅使用您的示例代码测试了这个答案,而不是使用任何更大的实际文档。