语言相关引用和 natbib

语言相关引用和 natbib

这是一个关于 BibTeX 和 TeX 如何交互的问题。

在这个问题中:Apalike 风格多种语言原帖作者要求找到一种方法,在文档的一部分中使用法语,在另一部分中使用英语。biblatex提出了一个解决方案,当然这个方案是可行的,但natbib现在已经不再使用了。

我并不是想直接解决这个问题,而是想了解为什么以下简单的方法不起作用。该方法只是使宏成为natbib \harvardand检查当前语言的条件,并插入适当的单词。我认为问题在于在\harvardand展开的点处,语言名称不可用。我想了解其工作原理的细节,以及是否有办法使用类似的方法来实现这一点。

\begin{filecontents}{\jobname.bib}
@article{twoauthors,
title={A cool paper},
author={Duck, A. and Marmot, A.},
journal={Journal of Irrelevant Science},
year={2019},
volume={1}}
\end{filecontents}

\documentclass{article}
\usepackage{natbib}
\usepackage[french,english]{babel}
\usepackage{iflang}
\bibliographystyle{agsm}
\usepackage{etoolbox}
\AtBeginDocument{\gdef\harvardand{\IfLanguageName{french}{et}{and}}}
\begin{document}
\cite{twoauthors} Manually: {Duck \harvardand\ Marmot}

\begin{otherlanguage}{french}
\cite{twoauthors} Manually: {Duck \harvardand\ Marmot}
\end{otherlanguage}
\bibliography{\jobname}

\end{document}

代码输出

答案1

您应该使该命令变得健壮(以便它能够在 aux 文件中传输时存活下来),并且您应该在 \begin{document} 之后重新定义它。

\documentclass{article}
\usepackage{natbib}
\usepackage[french,english]{babel}
\usepackage{iflang}
\bibliographystyle{agsm}
\usepackage{etoolbox}
\begin{document}
\DeclareRobustCommand{\harvardand}{\IfLanguageName{french}{et}{and}}

\cite{twoauthors} Manually: {Duck \harvardand\ Marmot}

\begin{otherlanguage}{french}
\cite{twoauthors} Manually: {Duck \harvardand\ Marmot}
\end{otherlanguage}
\bibliography{\jobname}

\end{document}

在 aux 文件中可以看到健壮定义和 \gdef 之间的区别:

\bibcite{twoauthors}{{1}{2019}{{Duck \harvardand  \ Marmot}}{{}}}

\bibcite{twoauthors}{{1}{2019}{{Duck and\ Marmot}}{{}}}

在此处输入图片描述

相关内容