私は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}
出力は次のとおりです。
2 つの\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}