这是一个关于 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}}{{}}}