排版標題以大括號中的單字結尾的完整引文

排版標題以大括號中的單字結尾的完整引文

我正在使用 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}

這是輸出:

上述文件的輸出,顯示第一個 \longfullcite 正確大寫“In”,但第二個則不然

請注意這兩個命令產生的單字“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}

相關內容