在 BibLaTeX 中添加不间断空格:`\setunit{\addunbreakingspace}`?

在 BibLaTeX 中添加不间断空格:`\setunit{\addunbreakingspace}`?

我将其biblatex用于参考书目。最后有两个项目,我们称它们为YZ。(具体细节并不重要。)目前我通过 用空格将它们分开\setunit{\addspace}。但是,我希望能够使这个空间不破. (这是因为Z通常只有 3 个字符长,所以我并不希望它单独占一行。)

我知道如何使用~文本中的常用方法做到这一点---并使用\usebibmacro{Y}~\usebibmacro{Z}提供所需的属性Z存在时但我并不总是能够获得信息Y Z。使用仅在打印\setunit{\addspace}时添加空格。Z

我可以将其变成仅在打印\setunit{\addspace}时添加的不间断空格吗?Z

甚至更好的是,其中的某个版本\nolinebreak[#]#一个数字,代表请求的“强度”。 (我相信4,最大值,不会强制换行。)我尝试了\usebibmacro{Y}\setunit{\addspace}\nolinebreak\usebibmacro{Z}\usebibmacro{Y}\nolinebreak\setunit{\addspace}\usebibmacro{Z},但无济于事。

答案1

biblatex有多种空格打印命令。它们列在§4.7.4中添加空格文档. 牢不可破空间可以添加\addnbspace

\setunit{\addnbspace}%

为了在某​​些情况下更精细地控制换行符,biblatex有三个命令\addlowpenspace\addhighpenspace\addabbrvspace,分别受到lownamepenaltyhighnamepenalty和的惩罚abbrvpenalty

\addlowpenspace用于\addhighpenspace排版姓名/姓名首字母,\addabbrvspace用于缩写中的空格。


如果这些都不合你的心意(因为它们在语义上不是正确的选择,或者因为你已经在使用它们并且使用了不同的惩罚),那么只要复制以下实现,就可以很容易地推出自己的版本\addabbrvspace

\newcounter{samtspacepenalty}
% 0 means line breaks after the space are OK,
% 10000 suppresses line breaks after the space
\defcounter{samtspacepenalty}{200}

\makeatletter
\newrobustcmd*{\addsamtspace}{%
  \unspace\blx@postpunct
  \penalty\value{samtspacepenalty}\space
  \blx@imc@resetpunctfont}
\makeatother

对于标准类别,我们将有以下对应关系

\nolinebreak[0] -> \defcounter{samtspacepenalty}{0}
\nolinebreak[1] -> \defcounter{samtspacepenalty}{51}
\nolinebreak[2] -> \defcounter{samtspacepenalty}{151}
\nolinebreak[3] -> \defcounter{samtspacepenalty}{301}
\nolinebreak[4] -> \defcounter{samtspacepenalty}{10000}

相关内容