Biblatex:括号和无括号

Biblatex:括号和无括号

我想知道 biblatex 和 pdflatex 是否可以使用样式自动选择\cite命令的文内外观author-year。例如,我希望引用跟在后面in,即in~\cite{label}...带括号,而我希望其他引用不带括号。规则将是这样的:如果\cite{label}跟在后面in,则使用,\parencite否则使用\cite。我当然可以手动实现这一点,但我不想这样做。

\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=bibtex,style=authoryear]{biblatex}
\addbibresource{database.bib}

\begin{filecontents*}{database.bib}
@article{art:article1,
title = {Title 1},
author = {Author1},
year={2018},
journal = {journal 1},
}
@article{art:article2,
title = {Title 2},
author = {Author2},
year={2018},
journal = {journal 2},
}
\end{filecontents*}

\begin{document}
As stated by~\cite{art:article1}, sky is blue. However, in~\cite{art:article2}, the author thinks that. By the way, the previous citation should look like (\cite{art:article2}).
\printbibliography

\end{document}

答案1

正如我在评论中写到的,LaTeX 宏通常不太了解它们周围的文本。使用一些巧妙的技巧,可以瞥见宏之后的内容(吸收另一个参数的简单解决方案至少会给我们下一个标记),但通常的技巧不适用于整个单词或短语。找出宏之前发生的事情就更难了。有有限的方法可以找出宏之前的标点符号,但通常没有更多。

因此,最好的选择是采用宏之外的方法\cite,本质上类似于对文档文本进行完整的搜索和替换工作。

当然,您可以在您最喜欢的编辑器中执行此操作。这样做的好处是您可以手动检查每个事件并评估替换的有效性。

如果您坚持要求一种保持实际.tex输入不变并且仅在 TeX 运行时发生的解决方案,我猜最好的选择是 LuaTeX 和expl3.expl3的 RegExp 确实令人印象深刻,但我不确定它是否旨在从本质上覆盖整个文档主体。

ALuaLaTeX解决方案可能看起来像这个答案米科回答宏:替换所有出现的单词。我试图小心谨慎,只在文档开头执行过滤器,以避免替换包中的任何内容。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage{luacode}
\begin{luacode}
function replace_cite (line)
  return string.gsub(line, "%f[%l_]in~\\cite" , "in~\\parencite") 
end
\end{luacode}

\usepackage[style=authoryear, backend=biber]{biblatex}

\addbibresource{biblatex-examples.bib}

\AtBeginDocument{%
  \luadirect{
    luatexbase.add_to_callback( "process_input_buffer",  replace_cite, "replace_cite")}}

\begin{document}
Lorem~\cite{sigfridsson}
this is replaced: in~\cite{sigfridsson}
but not: bin~\cite{sigfridsson}

in~\cite{sigfridsson}

\printbibliography
\end{document}

Lorem Sigfridsson and Ryde 1998 被替换为:在 (Sigfridsson and Ryde 1998) 中但不是:bin Sigfridsson and Ryde 1998//在 (Sigfridsson and Ryde 1998) 中

我个人不太喜欢这种自动化。如果有几种可能的替代方案,文档作者应该有意识地决定她想要哪种通用引用格式(带括号、不带括号、带不同括号)。特别是如果选择依赖于上下文、取决于周围文本的结构或带有某种内涵,那么人类应该做出决定。但也许我只是试图合理化 LaTeX 宏系统的缺点。

相关内容