我正在使用 Biblatex,需要在我的文檔文本中排版完整的引文,所以我使用莫威的\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}
這是輸出:
請注意這兩個命令產生的單字“In”的大小寫不一致\longfullcite
。相比之下,\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}