我在 Windows 上使用 LaTeX,我需要自定义论文中引文标签的格式。我为该软件包制作了一种符合我需求的新引文样式,但我在( etc.) 命令natbib
的标签格式方面遇到了麻烦。我使用的引文样式要求作者姓名在括号中时大写,例如 (KNUTH, 1984, p. 42),但不在括号中时则不同,如 Knuth (1984, p. 42) 所述。作为一种解决方法,我手动输入作者姓名,然后使用。不幸的是,这样只有年份可点击,而作者姓名则不可点击。\cite{}
\citep{}
\citeyear(Knuth1984)
文档结构比较复杂,我使用.sty文件进行论文排版,因此我至少会提供我放入序言中的相关包。
\documentclass[12pt,a4paper,oneside,final]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage[round]{natbib}
\usepackage[Bc,Barevne]{sci.muni.thesis.uprava}
\begin{document}
Citation in parentheses is great \citep{Knuth1984}.
But we also love citation in text, said \citet{Knuth1984}!
\bibliography{biblio}
\end{document}
期望结果应如下所示:
括号中的引用非常好(KNUTH,1984)。
但我们也喜欢文中引用,Knuth (1984) 说!
此外,后面写的参考书目条目\bibliography{biblio}
应该将作者姓氏大写,名字缩短为一个字母。我设法做到了这一点,但我认为你应该知道以便澄清。参考书目条目:
KNUTH,D.1984.TeX 书......
.bib 文件的格式如下:
@book{Knuth1984,
author = "Donald Knuth",
title = "The \TeX book",
...
}
我可以通过 .bst 文件提供,但我认为没有必要。有什么想法吗?
谢谢。
答案1
宏\citep
和\citet
内部都使用\NAT@citetp
,但使用第一个宏时,\ifNAT@swa
设置为 true,而第二个宏将其设置为 false。然后只需更改 的定义,\NAT@nmfmt
使其\MakeUppercase
在 的情况下使用 即可\citep
。
\begin{filecontents*}{\jobname.bib}
@book{Knuth1984,
author = {Donald E. Knuth},
title = {The {\TeX}book},
publisher = {Addison-Wesley},
year = 1984,
}
@book{multi,
author = {A. Uthor and W. Riter},
title = {A book},
publisher = {Some},
year = 1984,
}
@book{multi2,
author = {A. Uthor and W. Riter and S. C. I. Entist},
title = {Another book},
publisher = {Some},
year = 1984,
}
\end{filecontents*}
\documentclass{article}
\usepackage[round]{natbib}
\makeatletter
\renewcommand{\NAT@nmfmt}[1]{%
\ifNAT@swa\expandafter\MakeUppercase\else\expandafter\@firstofone\fi{{\NAT@up #1}}%
}
\makeatother
\begin{document}
Citation in parentheses is great \citep{Knuth1984}.
But we also love citation in text, said \citet{Knuth1984}!
Let's see multiauthor: \citep{multi} or \citet{multi}.
Let's see multiauthor: \citep{multi2} or \citet{multi2}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
这也会将“AND”和“ET AL.”大写。如果不希望这样,则.bst
必须更改文件,以便输出类似
\begin{thebibliography}{3}
\providecommand{\natexlab}[1]{#1}
\providecommand{\url}[1]{\texttt{#1}}
\expandafter\ifx\csname urlstyle\endcsname\relax
\providecommand{\doi}[1]{doi: #1}\else
\providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi
\bibitem[Knuth(1984)]{Knuth1984}
Donald~E. Knuth.
\newblock \emph{The {\TeX}book}.
\newblock Addison-Wesley, 1984.
\bibitem[Uthor \NATand{} Riter(1984)]{multi}
A.~Uthor and W.~Riter.
\newblock \emph{A book}.
\newblock Some, 1984.
\bibitem[Uthor \NATetal{}(1984)Uthor, Riter, and Entist]{multi2}
A.~Uthor, W.~Riter, and S.~C.~I. Entist.
\newblock \emph{Another book}.
\newblock Some, 1984.
\end{thebibliography}
用\NATand{}
和\NATetal{}
代替硬连线and
和et al.
。上面的 LaTeX 代码应该补充
\DeclareRobustCommand{\NATand}{and}
\DeclareRobustCommand{\NATetal}{et~al.}