调用词汇表来填充书目条目的作者字段

调用词汇表来填充书目条目的作者字段

它不是开箱即用的:它将名字和姓氏视为姓氏。我猜“扩展后”会起作用,但我很久没有使用过此功能了。

\documentclass{article}
\usepackage[french]{babel}
\usepackage{expl3}
\usepackage{glossaries}
\usepackage{csquotes}
\usepackage[backend=biber,autolang=other]{biblatex}

\DefineBibliographyStrings{french}{
  in = {dans},
}

\newglossary*{cont}{Contact}

\newglossaryentry{dupont}
{
  type=cont,
  name={Dupont, Michel},
  description={}
}    

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{lefoo
  ,author =       {Dupond, Marie}
  ,title =        "TITRE"
  ,journal =      "LE JOUR"
  ,year =         "AAAA"
  ,language={french}
  ,hyphenation={french}
}
@article{lebar
  ,author =       {\gls{dupont}}
  ,title =        "TITRE"
  ,journal =      "LE JOUR"
  ,year =         "AAAA"
  ,language={french}
  ,hyphenation={french}
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}

Une citation: \autocite{lefoo}.

Une citation au milieu du texte: Comme \textcite{lebar} a dit \dots

\printbibliography
\end{document}

打印

答案1

我担心这根本行不通。

姓名字段需要由 Biber(或 BibTeX)解析以提取姓名的不同部分(名字、姓氏、后缀和前缀),因为 Biber 不了解一般的 LaTeX 宏(它知道一些针对单个非 ASCII 字符的宏),所以无法像 那样\gls{dupont}处理Dupont, Michel

在示例中\gls{dupont}被视为作者的唯一姓氏,并且宏后来才被扩展以产生您看到的输出。

没有任何数量的\expandafters 可以帮助您将预期的名称传递给 Biber。您可以使用源映射再次替换宏,但这似乎有点倒退,并且您会失去 的所有其他好处\gls

\documentclass{article}
\usepackage[french]{babel}
\usepackage{expl3}
\usepackage{glossaries}
\usepackage{csquotes}
\usepackage[backend=biber,autolang=other]{biblatex}

\DefineBibliographyStrings{french}{
  in = {dans},
}

\newglossary*{cont}{Contact}

\newglossaryentry{dupont}
{
  type=cont,
  name={Dupont, Michel},
  description={}
}    

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite]{
    \map{
      \step[fieldsource=author, match=\regexp{\\gls\{dupont\}}, replace={Dupont, Michel}]
    }
  }
}

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{lefoo
  ,author =       {Dupond, Marie}
  ,title =        "TITRE"
  ,journal =      "LE JOUR"
  ,year =         "AAAA"
  ,language={french}
  ,hyphenation={french}
}
@article{lebar
  ,author =       {\gls{dupont}}
  ,title =        "TITRE"
  ,journal =      "LE JOUR"
  ,year =         "AAAA"
  ,language={french}
  ,hyphenation={french}
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
Une citation: \autocite{lefoo}.

Une citation au milieu du texte: Comme \textcite{lebar} a dit \dots

\printbibliography
\end{document}

格式正确的名称。

您可能需要采用不同的方式来实现您想要做的事情\gls

相关内容