对于特定用例,我希望使用样式:在文本中内联显示引文,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 命令\addspace
,title
被转换为\printfield{title}
,等等。
markdown 类型的 CSL 可以存储在各个地方。
在此示例中,指令通过专用引用命令的 prenote 字段传递给正则表达式\cslcite
(因此使用相同的引用命令可以使用不同的格式,只是 prenote 设置不同):
引文如下:
\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
有一个网页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>
然后它产生预期的输出。