使用 biblatex 进行 URL 换行

使用 biblatex 进行 URL 换行

如何允许长 URL 在任何时候换行。这是在参考书目中,而不是正文中。我试图节省空间,所以不想添加额外的空格,例如让它只在斜线处换行,就像默认情况下那样。我正在使用biblatex+ biber

答案1

答案问题linkedin domwass 的评论中提到了包url。此包已由加载。它是使用中定义的biblatex命令进行配置的。\biburlsetupbiblatex.def

\UrlBreaksURL 在、\UrlBigBreaks和中指定的字符集处断开\UrlSpecials\UrlBigBreaks这将防止在重复字符之间发生断开(例如,下面代码中的--和)。处理文档字体中可能不存在的字符处的断开。::\UrlSpecials

升级到最新版本biblatex应该可以解决您的问题,因为\biburlsetup在版本中进行了扩展,允许在许多不同的字符处设置断点。作为参考,以下是来自版本1.4c的定义:\biburlsetup1.7

\newcounter{biburlnumpenalty}
\newcounter{biburlucpenalty}
\newcounter{biburllcpenalty}

\newcommand*{\biburlsetup}{%
  \Urlmuskip=0mu plus 3mu\relax
  \mathchardef\UrlBigBreakPenalty=100\relax
  \mathchardef\UrlBreakPenalty=200\relax
  \def\UrlBigBreaks{\do\:\do\-}%
  \def\UrlBreaks{%
    \do\.\do\@\do\/\do\\\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\}%
    \do\,\do\?\do\'\do\+\do\=\do\#\do\$\do\&\do\*\do\^\do\"}%
  \ifnumgreater{\value{biburlnumpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburlnumpenalty}}}}%
     \do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
    {}%
  \ifnumgreater{\value{biburlucpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburlucpenalty}}}}%
     \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
     \do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T
     \do\U\do\V\do\W\do\X\do\Y\do\Z}
    {}%
  \ifnumgreater{\value{biburllcpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburllcpenalty}}}}%
     \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
     \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t
     \do\u\do\v\do\w\do\x\do\y\do\z}
    {}%
  \let\do=\noexpand}

1.4c与的版本不同1.6,此新定义默认不再允许在数字、大写字母和小写字母处设置断点。可以通过将惩罚计数器设置为0和之间的值10000(不包括)来允许在这些字符处设置断点。例如:

\setcounter{biburlnumpenalty}{100}
\setcounter{biburlucpenalty}{100}
\setcounter{biburllcpenalty}{100}

\defcounter可以使用包中的命令etoolbox(也由 加载)在本地重置惩罚biblatex。例如:

\defcounter{biburlnumpenalty}{3000}
\defcounter{biburlucpenalty}{6000}
\defcounter{biburllcpenalty}{9000}

要将此新设置与旧版本一起使用biblatex,只需将定义代码\biburlsetup及其惩罚计数器放在序言中,然后替换\newcommand\renewcommand

答案2

即使是网站参考,我的 Zotero 也不会url = ...为 .bib 文件导出一行,而只是howpublished = {https://...}。这导致参考书目中的某些 URL(我不得不使用 multibib,而不是 bibtex)导致水平框过满,并且 URL 会不带换行符地从文档中弹出。显然,幕后没有 \url,但(我认为?)存在来自 hyperref 包的 \href,它具有不同的行为。

在我尝试的众多选项中,我最终手动将 替换howpublished = {https://...}howpublished = {\url{https://...}}来修复断开的链接。这样 URL 看起来可能很难看,但可以使用 来\urlstyle{rm}修复\usepackage[hyphens]{url}

相关内容