將書目條目傳送到索引會biblatex
導致有時不需要的前綴大寫。例如,帶有前綴的荷蘭語名字貨車或帶有前綴的法國名字德有時在索引中不大寫。另外,也許有點不尋常,但仍然可能相關,我最近了解到一位研究人員希望僅以小寫字母引用他們的名字(我相信這是 SocSci 中的某個地方)。
微量元素:
\begin{filecontents}{test.bib}
@misc{vanTrijp2013,
author = {van Trijp, Remi},
date = {2013},
title = {A Comparison between approach A and B},
}
\end{filecontents}
\documentclass{article}
\usepackage[indexing=cite,style=authoryear,useprefix=true]{biblatex}
\addbibresource{test.bib}
\makeindex
\begin{document}
\cite{vanTrijp2013}
\end{document}
這會在文件中產生以下條目.dx
:
\indexentry{van Trijp, Remi@\MakeCapital {van} Trijp, Remi}{1}
這會產生索引條目雷米·範·特里普, 雖然雷米·範·特里普會被優先選擇。我希望它\MakeCapital
是可選的,而又不會混淆索引中條目的排序。
該問題可能與\mkbibindexname
from相關biblatex.def
,其中\MakeCapital
是硬編碼的。
一個可能的解決方案是使用etoolbox
, 簡單地\MakeCapital
從定義中刪除 :
\patchcmd{\mkbibindexname}{\ifdefvoid{#3}{}{\MakeCapital{#3} }}{\ifdefvoid{#3}{}{#3 }}{}{}
但我不認為以這種方式更改包的程式碼是一個可持續的解決方案。您知道有更好的方法嗎?
答案1
儘管 的實際定義\mkbibindexname
看起來有點令人畏懼,但用戶是如果他們不喜歡它產生的輸出,應該更改該巨集。因此,按照您的建議修補巨集是完全可以的。有一個普遍的問題是修補巨集或重新定義巨集是否更好(例如參見Biblatex 的 bibmacros、參考書目驅動程式、格式 - 修補還是重新定義?),對於像\mkbibindexname
我這樣的「小」宏,我通常會喜歡重新定義路線而不是修補,但這取決於個人喜好。
對於此應用程序,我們可能會重新定義相關宏,如下所示
\documentclass{article}
\usepackage[indexing=cite,style=authoryear,useprefix=true]{biblatex}
\usepackage{makeidx}
\makeatletter
\renewcommand*{\mkbibindexname}[4]{%
\ifuseprefix
{\ifdefvoid{#3}{}{#3 }%
\@firstofone #1% remove spurious braces
\ifdefvoid{#4}{}{ #4}%
\ifdefvoid{#2}{}{, #2}}
{\@firstofone #1% remove spurious braces
\ifdefvoid{#4}{}{ #4}%
\ifboolexpe{%
test {\ifdefvoid{#2}}
and
test {\ifdefvoid{#3}}}
{}
{,}%
\ifdefvoid{#2}{}{ #2}%
\ifdefvoid{#3}{}{ #3}}}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{vanTrijp2013,
author = {van Trijp, Remi},
date = {2013},
title = {A Comparison between approach A and B},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\makeindex
\begin{document}
\cite{vanTrijp2013}
\printindex
\end{document}
如果設定了某個選項,也應該可以選擇性地套用於\MakeCapital
名稱,但隨後您必須決定如何講述biblatex
這一點。