控制 \cite 打印的内容

控制 \cite 打印的内容

我正在使用 Beamer 进行演示,并试图弄清楚如何将期刊信息与引文一起打印出来。我目前正在使用 软件包natbibBibTeX假设我想引用该论文 (citeKey="Einstein"):

爱因斯坦,A.(1936)。恒星因引力场中光线的偏转而产生的类似透镜的作用。科学,84(2188),506-507。

在我的演示中。我希望命令\citet{Einstein}产生:

爱因斯坦科学842188,506-507(1936年)

(或者其他类似的简单命令,我想在我的序言中添加一段内容,然后执行查找替换来解决这个问题。这是 LaTeX,所以必须像那样简单!)

我不是第一个想这样做的人,我不敢相信我断断续续搜索了两天却一无所获。请尽快回答我的问题或指出我找不到的做过这件事的地方,以证实我的愚蠢。

答案1

下面是如何使用 biblatex 执行此操作的示例。

举个例子,我假设你有一个名为的文件,einstein.bib内容如下

@article{Einstein,
 author = "Einstein, Albert",
 title = "Lens-like action of a star by the deviation of light in the gravitational field",
 journal = "Science",
 volume = "84",
 issue = "2188",
 pages = "506-507",
 year = "1936"
}

只需付出最少的努力,它就能让你接近目标。它使用 biblatex 的phys样式,只是对其进行了修改,使其不打印标题。

\documentclass{beamer}

\usepackage[style=phys,backend=biber]{biblatex}
% change this to the name of your .bib file
\addbibresource{einstein.bib}
% you can add additional \addbibresource commands to use more .bib files

% this modifies the biblatex "phys" style to not print the title
% comment this line out if you want to see what it does normally
\renewbibmacro*{title}{}

\begin{document}
 \begin{frame}{Test frame}
  % \fullcite prints the entire citation as it would appear in a full bibliography
  \fullcite{Einstein}
 \end{frame}
\end{document}

如果将其保存为 biblatextest.tex,则需要运行

pdflatex biblatextest
biber biblatextest
pdflatex biblatextest
pdflatex biblatextest

如果你没有biber安装,你可以解决这个问题;只需将backend=biberLaTeX 文件中的 更改为backend=bibtex,然后在编译文档时运行bibtex而不是。结果是这样的:biber

以 phys 样式输出

(抱歉看得不太清楚,但你应该明白我的意思了)。

如果您想要获得与所需样式完全匹配的样式,则可能需要执行更复杂的事情。 Biblatex 附带多种样式,也许其中一种样式会为您提供所需的精确输出,但我无法检查所有样式,而且很有可能没有一种样式可以完全匹配。

biblatex 样式有两种,一种是定义文内引文的样子,存储在.cbx文件中;另一种是定义参考书目条目的样子,存储在.bbx文件中。对于这样的演示,您没有传统的参考书目,因此,您需要自行判断是将样式设为引文样式 ( .cbx) 还是参考书目样式 ( .bbx)。由于您要使用的格式包含足够的信息来完全识别参考文献,因此我将它设为参考书目样式。

要使这种风格适用于这个特定的引用,你需要的(几乎)最低限度是这样的:

\ProvidesFile{mystyle.bbx}
\RequireBibliographyStyle{standard}

% make \newunit insert a space
\renewcommand\newunitpunct{\addspace}
% make volume formatted as bold
\DeclareFieldFormat*{volume}{\mkbibbold{#1}}
% make pages print out without "pp."
\DeclareFieldFormat{pages}{#1}
% make year print out in parentheses
\DeclareFieldFormat{year}{\mkbibparens{#1}\nopunct}
% make name print as only last name
\DeclareNameFormat{last}{\usebibmacro{name:last}{#1}{#3}{#5}{#7}}
% set that to be the default name format
\DeclareNameAlias{default}{last}

% defines the format used for entry type "article"
\DeclareBibliographyDriver{article}{%
 \usebibmacro{bibindex}% useful in case bibliography is being indexed
 \usebibmacro{begentry}% a hook for begin-entry content
 \usebibmacro{author/translator+others}% defined in biblatex.def
 \newunit%
 \usebibmacro{journal}% defined in biblatex.def
 \setunit{\addcomma\addspace}% print comma and space
 \printfield{volume}% print volume using the format defined above
 \newunit%
 \printfield{issue}% print issue number
 \setunit{\addcomma\addspace}% print comma and space
 \printfield{pages}% print page numbers using format from above
 \newunit%
 \printfield{year}% print year using format defined above
 \usebibmacro{finentry}% a hook for end-entry content
}

将其另存为mystyle.bbx(或者如果你更改文件名,请更新命令\ProvidesFile以匹配)在你的主文件所在的目录中.tex,或者在你的 texmf 树中的某个位置。 (.../texmf/tex/latex/biblatex/bbx/mystyle.bbx将是一个典型的路径,但只要 LaTeX 可以找到它就没关系。)你的.tex文件可以保持不变\usepackage[...]{biblatex},除了行,应该更改为

\usepackage[bibstyle=mystyle,backend=biber]{biblatex}

此行mystyle应为文件的任何名称.bbx,只是不带.bbx扩展名。

一切设置完毕后,以相同的方式编译文件,您将得到以下内容:

自定义样式的输出

当然,请记住,我创建此样式是为了与此参考书目条目配合使用。为了使其更普遍有用,您必须对其进行修改以考虑其他参考书目条目中发现的更复杂的功能。值得庆幸的是,这并不像它想象的那么难(例如使用 bibtex),因为 biblatex 有相当完善的文档,但仍有大量信息需要解析。如果您想这样做,我建议从 biblatex 附带的标准样式之一开始并对其进行修改,而不是从头开始构建自己的样式。

答案2

大卫的biblatex回答可能比我的更好,但由于我在看到他的回答之前一直在研究这个问题,所以这里有一个替代方案:

\documentclass{beamer}
\begin{filecontents}{\jobname.bib}
@article{einstein,
  author = "Albert Einstein",
  year = "1936",
  title = "Lens-like action of a star by the deviation of light in the gravitational field",
  journaltitle = "Science",
  volume = "84",
  number = "2188",
  pages = "506--507",
}
\end{filecontents}
\usepackage[backend=bibtex8,citestyle=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\newcommand{\citet}[1]{\citeauthor{#1}
\textit{\citefield{#1}{journaltitle}},
\textbf{\citefield{#1}{volume}}
\citefield{#1}{number},
\citefield{#1}{pages}
(\citefield{#1}{year})%
}

\begin{document}
\begin{frame}
\citet{einstein}
\end{frame}
\end{document}

在此处输入图片描述

相关内容