姓名(年份) 标题 书目 风格(CSL)

姓名(年份) 标题 书目 风格(CSL)

对于特定用例,我希望使用样式:在文本中内联显示引文,Authors (Year) Title而不显示其他内容。例如,我希望获得以下引文样式:

Gu 等人 (2017) 非自回归神经机器翻译

来自下面显示的我的参考书目中的 bibtex 条目。

有没有一种引用样式语言样式可以让我做到这一点?例如,github.com/citation-style-language/styles/


@misc{https://doi.org/10.48550/arxiv.1711.02281,
  doi       = {10.48550/ARXIV.1711.02281},
  url       = {https://arxiv.org/abs/1711.02281},
  author    = {Gu, Jiatao and Bradbury, James and Xiong, Caiming and Li, Victor O. K. and Socher, Richard},
  keywords  = {Computation and Language (cs.CL), Machine Learning (cs.LG), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title     = {Non-Autoregressive Neural Machine Translation},
  publisher = {arXiv},
  year      = {2017},
  copyright = {arXiv.org perpetual, non-exclusive license}
}

答案1

可以使用 expl3 的正则表达式容量来模拟 CSL,使得诸如 的指令space被转换为 Biblatex 命令\addspacetitle被转换为\printfield{title},等等。

markdown 类型的 CSL 可以存储在各个地方。

在此示例中,指令通过专用引用命令的 prenote 字段传递给正则表达式\cslcite(因此使用相同的引用命令可以使用不同的格式,只是 prenote 设置不同):

顾作为CSL

引文如下:

\cslcite[given-family, name, space, lparen, year, rparen, space, title][]{gu}

该方法可以形成一个完整的包,使用任何A->B翻译技术,而不仅仅是A这里使用的组件的基本标记。

平均能量损失

% arara: lualatex
% arara: biber
% arara: lualatex


\begin{filecontents*}[overwrite]{\jobname.bib}
@misc{gu,
  doi       = {10.48550/ARXIV.1711.02281},
  url       = {https://arxiv.org/abs/1711.02281},
  author    = {Gu, Jiatao and Bradbury, James and Xiong, Caiming and Li, Victor O. K. and Socher, Richard},
  keywords  = {Computation and Language (cs.CL), Machine Learning (cs.LG), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title     = {Non-Autoregressive Neural Machine Translation},
  publisher = {arXiv},
  year      = {2017},
  copyright = {arXiv.org perpetual, non-exclusive license}
}

@Book{1990,
  title     = {title},
  publisher = {publisher},
  date      = {1990},
  author    = {author},
  urldate={2022-11-28},
  url={zzz.zzz},
}


\end{filecontents*}

\documentclass{article}

\usepackage{csquotes}
\usepackage{fontspec}
\setmainfont{FreeSerif}    

\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}




\ExplSyntaxOn

\tl_new:N \l_myscriptname_tl
\NewDocumentCommand { \getblcommand } { m }
{
\tl_set:Nx \l_myscriptname_tl { #1 }
%\tl_show:N \l_myscriptname_tl 

\regex_replace_all:nnN 
{ given\-family } 
{ 
\c{DeclareNameAlias}
\cB\{ author\cE\}
\cB\{ given-family \cE\}
} 
\l_myscriptname_tl


%formatting
\regex_replace_all:nnN 
{ itcolon } 
{ 
\c{textit} \cB\{ \c{addcolon} \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ isubtitle } 
{ 
isubxxx
} 
\l_myscriptname_tl


\regex_replace_all:nnN 
{ subtitle } 
{ 
subxxx
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ emdash } 
{ 
\c{addspace}---\c{addspace}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ endash } 
{ 
\c{addspace}--\c{addspace}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ dot } 
{ 
\c{adddot}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ comma } 
{ 
\c{addcomma}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ colon } 
{ 
\c{addcolon}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ space } 
{ 
\c{addspace}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ lparen } 
{ 
(
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ rparen } 
{ 
)
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ lbrace } 
{ 
\{
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ rbrace } 
{ 
\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ name } 
{ 
\c{printnames} \cB\{ author \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ title } 
{ 
\c{printfield} \cB\{ title \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ edition } 
{ 
\c{printfield} \cB\{ edition \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ location } 
{ 
\c{printlist} \cB\{ location \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ publisher } 
{ 
\c{printlist} \cB\{ publisher \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ year } 
{ 
\c{thefield} \cB\{ year \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ volume } 
{ 
\c{printfield} \cB\{ volume \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ note } 
{ 
\c{thefield} \cB\{ note \cE\}
} 
\l_myscriptname_tl


\regex_replace_all:nnN 
{ isubxxx } 
{ 
\c{printfield} [emph] \cB\{ subtitle \cE\}
} 
\l_myscriptname_tl

\regex_replace_all:nnN 
{ subxxx } 
{ 
\c{printfield} \cB\{ subtitle \cE\}
} 
\l_myscriptname_tl


%\tl_show:N \l_myscriptname_tl 

%output

\tl_use:N \l_myscriptname_tl
}


\ExplSyntaxOff


\DeclareCiteCommand{\cslcite}%
{}%
{%
\forcsvfield{\getblcommand}{prenote}%
}%
{%
%\multicitedelim%
}%
{\usebibmacro{postnote}%
 }




\begin{document}
Normal cite: \cite{gu}.

Inline, using prenote to hold a custom CSV list: \cslcite[given-family, name, space, lparen, year, rparen, space, title][]{gu}.

\printbibliography
\end{document}

使用 Biblatex 的数字样式选项,[style=numeric]输出如下所示:

古2

答案2

有一个网页https://editor.citationstyles.org/searchByExample/遗憾的是,通过搜索 CSL 样式,我找不到给定的“作者(日期)标题”格式的样式。

在此处输入图片描述

我建议修改现有样式。例如,您可以修改 APA.csl 中的引用布局

    <layout prefix="(" suffix=")" delimiter="; ">
      <group delimiter=", ">
        <text macro="author-intext"/>
        <text macro="date-intext"/>
        <text macro="citation-locator"/>
      </group>
    </layout>

    <layout delimiter="; ">
      <group delimiter=" ">
        <text macro="author-intext"/>
        <text macro="date-intext" prefix="(" suffix=")"/>
        <text variable="title" form="short"/>
        <text macro="citation-locator"/>
      </group>
    </layout>

然后它产生预期的输出。

在此处输入图片描述

相关内容