使用 natbib 更改引用字体样式

使用 natbib 更改引用字体样式

\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

而不是上面的重新定义。

请注意,我仅使用您的示例代码测试了这个答案,而不是使用任何更大的实际文档。

相关内容