我正在使用 Biblatex,需要在文档文本中排版完整引文,因此我使用moewe 的\longfullcite
命令。虽然它在大多数情况下都能正常工作,但它在处理 Biber/BibTeX 条目时会遇到麻烦,因为其中字段的最后一个单词用括号括起来(以强制大写)。在这些情况下,\longfullcite
可能无法正确地将以下单词大写。请看以下示例:
\documentclass{article}
\usepackage{biblatex}
\makeatletter
\newcommand{\tempmaxup}[1]{\def\blx@maxcitenames{\blx@maxbibnames}#1}
\makeatother
\DeclareCiteCommand{\longfullcite}[\tempmaxup]
{\usebibmacro{prenote}}
{\usedriver
{\DeclareNameAlias{sortname}{default}}
{\thefield{entrytype}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\usepackage{filecontents}
\begin{filecontents}{test.bib}
@inproceedings{blow2015,
author = {Blow, Joe},
title = {{GNU} loves me},
year = 2015,
booktitle = {Proceedings of Some Conference},
}
@inproceedings{blow2016,
author = {Blow, Joe},
title = {I love {GNU}},
year = 2016,
booktitle = {Proceedings of Some Conference},
}
\end{filecontents}
\addbibresource{test.bib}
\begin{document}
\nocite{*}
\noindent
\longfullcite{blow2015}\\
\longfullcite{blow2016}
\printbibliography
\end{document}
输出如下:
请注意,两个\longfullcite
命令生成的单词“In”的大小写不一致。相比之下,通过 生成的引文\printbibliography
正确地将两个条目的“In”大写。
是什么导致了这种不一致?我该如何修复或解决它(最好通过更改定义\longfullcite
而不是更改.bib
文件)?
答案1
这是一个已知问题(https://github.com/plk/biblatex/issues/295) 并影响所有文内引文,尽管它可能只在\fullcite
类似 - 的引文中才真正可见。不幸的是,找到正确解决方案的机会非常渺茫。biblatex
的标点符号跟踪器会严重修改现有的空间因子,但在引文中这样做可能会对引文之外的文本产生不必要的连锁反应。
您必须\@
在标题末尾添加一个大写字母。但如果您愿意,您可以在格式中自动完成此操作
\DeclareFieldFormat{title}{\mkbibemph{#1\@}}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{\mkbibquote{#1\isdot\@}}
\DeclareFieldFormat
[suppbook,suppcollection,suppperiodical]
{title}{#1\@}
答案2
肮脏的黑客:
插入一些不可见且没有宽度的东西。我确信这会导致问题,但我不知道是哪些问题 :)
\documentclass{article}
\usepackage{biblatex}
\makeatletter
\newcommand{\tempmaxup}[1]{\def\blx@maxcitenames{\blx@maxbibnames}#1}
\makeatother
\DeclareCiteCommand{\longfullcite}[\tempmaxup]
{\usebibmacro{prenote}}
{\usedriver
{\DeclareNameAlias{sortname}{default}}
{\thefield{entrytype}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\usepackage{filecontents}
\begin{filecontents}{test.bib}
@inproceedings{blow2015,
author = {Blow, Joe},
title = {{GNU} loves me},
year = 2015,
booktitle = {Proceedings of Some Conference},
}
@inproceedings{blow2016,
author = {Blow, Joe},
title = {I love {GNU}\mbox{}},
year = 2016,
booktitle = {Proceedings of Some Conference},
}
\end{filecontents}
\addbibresource{test.bib}
\begin{document}
\nocite{*}
\noindent
\longfullcite{blow2015}\\
\longfullcite{blow2016}
\printbibliography
\end{document}