问题描述
\cite
我在使用和命令以两种不同的方式显示参考书目引文时遇到了问题\citep
。下面我描述了我的问题,给出了一个示例代码并展示了我从编译中获得的结果。
我正在使用 TeX Live 和 TeXmaker(Ubuntu 18.04),安装了 Biber 来编写参考书目。我需要字母样式,它可以根据命令 \cite{} 的要求工作。例如,参考\cite{Hecht10}
文献带有括号 [Hec10],这就是我想要的。但我还想用括号引用参考文献。我想要这样的东西:“有关更多详细信息,请参阅 Hecht (2010) 的作品”。我尝试了 \citep{Hecht10} 和 \parencite{Hecht10},但它仍然写着 [Hec10]。
平均能量损失
\documentclass[
11pt,
twoside,
english,
onehalfspacing,
toctotoc,
headsepline,
]{MastersDoctoralThesis}
\usepackage[autostyle=true]{csquotes}
\usepackage[
natbib=true,
backend=biber,
style=alphabetic, %numeric draft
sorting=none
]{biblatex}
\addbibresource{bibliographie.bib}
\begin{document}
See the work of \citep{Hecht10} for more details on laser developments \cite{Hecht10}.
\end{document}
输出
这段代码的运行结果如下:
有关激光发展的更多详细信息,请参阅[Hec10] 的作品 [Hec10]。
我想要的是
但我想要:
有关激光发展的更多详细信息,请参阅 Hecht (2010) 的著作 [Hec10]。
然后,我们的想法是删除第二个也是最后一个\cite{}
。因此,我的文档中将有两种参考书目调用,“[name]”和“name (year)”分别用 和 调用\cite{}
,\citep{}
或者我不知道的任何命令。
答案1
一般来说,您要查找的两个命令称为\textcite
和\parencite
。
\parencite
用于括号引用(通常在句末),而\textcite
用于作者是句子一部分的文本/叙述引用。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
See the work of \textcite{sigfridsson} for more details
on laser developments.
Lasers are very interesting \parencite{worman}.
\printbibliography
\end{document}
使用此alphabetic
样式,\parencite
生成字母数字引用标签,并\textcite
生成作者姓名,后跟括号中的字母数字引用标签。这样,在所有情况下,同一作品都会被统一引用,并带有相同的标签。
我建议不要\textcite
打印年份而不是字母数字引用标签,因为这可能不足以唯一地标识条目或会导致两种不同引用样式的混合。
如果您无论如何都打算\parencite
在句末加上出版物,并且句子不太长,您可能需要考虑使用\citeauthor
而不是\textcite
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
See the work of \citeauthor{sigfridsson} for more details
on laser developments \parencite{worman}.
Lasers are very interesting \parencite{worman}.
\printbibliography
\end{document}
如果您坚持使用类似 textcite 的命令的“作者(年份)”引用,我们可以从中窃取相关代码authoryear.cbx
(我ay:
在宏名称中添加了以避免名称冲突)
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=alphabetic, labeldateparts]{biblatex}
\newbibmacro*{ay:citeyear}{%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\usebibmacro{ay:cite:label}}
{\usebibmacro{ay:cite:labeldate+extradate}}}
{\usebibmacro{ay:cite:shorthand}}}
\newbibmacro*{ay:textcite}{%
\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{ay:cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nonameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{ay:cite:labeldate+extradate}}
{\usebibmacro{ay:cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{ay:citeyear}}}
\newbibmacro*{ay:cite:shorthand}{%
\printtext[bibhyperref]{\printfield{shorthand}}}
\newbibmacro*{ay:cite:label}{%
\iffieldundef{label}
{\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
{\printtext[bibhyperref]{\printfield{label}}}}
\newbibmacro*{ay:cite:labeldate+extradate}{%
\iffieldundef{labelyear}
{}
{\printtext[bibhyperref]{\printlabeldateextra}}}
\newbibmacro*{ay:textcite:postnote}{%
\iffieldundef{postnote}
{\ifbool{cbx:parens}
{\bibcloseparen}
{}}
{\ifbool{cbx:parens}
{\setunit{\printdelim{postnotedelim}}}
{\setunit{\printdelim{extpostnotedelim}\bibopenparen}}%
\printfield{postnote}\bibcloseparen}}
\DeclareCiteCommand{\aytextcite}
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\iffirstcitekey
{\setcounter{textcitetotal}{1}}
{\stepcounter{textcitetotal}%
\textcitedelim}%
\usebibmacro{ay:textcite}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}
{\usebibmacro{ay:textcite:postnote}}
\DeclareMultiCiteCommand{\aytextcites}{\aytextcite}{}
\addbibresource{biblatex-examples.bib}
\begin{document}
See the work of \aytextcite{sigfridsson} for more details
on laser developments \parencite{worman}.
Lasers are very interesting \parencite{worman}.
Lorem \aytextcite{knuth:ct:b}
ipsum \aytextcite{knuth:ct:c}
\printbibliography
\end{document}
如果您使用natbib
兼容模式,则可以使用\citep
代替\parencite
和\citet
代替\textcite
。但我通常不建议使用此选项。(将 natbib=true 与 biblatex 一起使用有什么缺点吗?)
答案2
首先,使用 BibLaTeX 时,使用\cite
、\autocite
和\parencite
而不是\citet
和\citep
。
还有更多优雅的选择,但是这个有效:
\usepackage[style=authoryear]{biblatex}
\DeclareCiteCommand*{\parencite}[]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{author}
\bibopenparen\usebibmacro{citeyear}\bibcloseparen}
{\multicitedelim}
{\usebibmacro{postnote}}
然后您就可以使用 进行引用\parencite*{Hecht10}
。请注意星号 ;-)。
答案3
Biblatex 提供了类似\citeauthor{mysource}
和 的命令\citeyear{mysource}
。它们分别仅打印作者和年份字段。您可以组合它们,并修改命令\citep
以表示此组合:
\renewcommand\citep[1]{%
\citeauthor{#1}~(\citeyear{#1})%
}
\citep
然后根据需要使用:
See the work of \citep{Hecht10} for more details on laser developments \cite{Hecht10}.
(波浪号 ( ~
) 是不间断空格。它像空格一样打印,但第二部分绝不会换到下一行,而第一部分仍留在上一行的末尾。百分号可防止出现多余的空格,例如,看看如果删除它们并尝试使用 会发生什么See \citep{Hecht10}.
。)
这个回答对你有帮助吗?