为同一标签定义不同大小写的引用命令

为同一标签定义不同大小写的引用命令

我在 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{}代替硬连线andet al.。上面的 LaTeX 代码应该补充

\DeclareRobustCommand{\NATand}{and}
\DeclareRobustCommand{\NATetal}{et~al.}

相关内容