我希望 cite 和 citep 能够以不同的方式处理 biber 和字母风格

我希望 cite 和 citep 能够以不同的方式处理 biber 和字母风格

问题描述

\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}

有关激光发展的更多详细信息,请参阅 Sigfridsson 和 Ryde [SR98] 的著作。//激光非常有趣 [Wor02]。

使用此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 再次取得成果

\citep然后根据需要使用:

See the work of \citep{Hecht10} for more details on laser developments \cite{Hecht10}.

(波浪号 ( ~) 是不间断空格。它像空格一样打印,但第二部分绝不会换到下一行,而第一部分仍留在上一行的末尾。百分号可防止出现多余的空格,例如,看看如果删除它们并尝试使用 会发生什么See \citep{Hecht10}.。)

这个回答对你有帮助吗?

相关内容