我将其biblatex
用于参考书目。最后有两个项目,我们称它们为Y
和Z
。(具体细节并不重要。)目前我通过 用空格将它们分开\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
,分别受到lownamepenalty
,highnamepenalty
和的惩罚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}