biblatex 书目中的长 URL 的换行符?

biblatex 书目中的长 URL 的换行符?

我有一些很长的 URL,其中不包含特殊的“换行符”,例如“-”或“/”。我该如何自动断开这些 URL?

\documentclass{scrreprt}

\usepackage[ngerman]{babel}                    
\usepackage[latin1]{inputenc}                
\usepackage[T1]{fontenc}
\usepackage[backend=biber]{biblatex}
\usepackage{url}
\usepackage{dingbat}  % for \carriagereturn symbol
\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\g@addto@macro{\UrlBreaks}{%
\do\/\do\d%
}
\makeatother

\begin{filecontents}{bachelorarbeit_lit.bib}
@ONLINE{java96,
    author = {{Joe Black}},
    title = {Foobar 1.0},
    year = {1996},
    month = {1},
    url = {http://www.aaa.bb.cccc.dh/uploads/dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.pdf},
    urldate = {2011-03-02},
    sortname = {Sun},
    keywords = {www}
}
\end{filecontents}

\bibliography{bachelorarbeit_lit}

\begin{document}
Test \cite{java96}
\printbibliography
\end{document}

编辑

我不知道为什么,但它仍然不起作用。有没有自动中断长 URL 的选项。我不在乎中断在哪里,但它应该自动完成。即使我手动指定“中断字符”,它也不会起作用(如示例所示)。

答案1

在 的参考书目中\UrlBreaks不需要黑客攻击。包使用并已添加了许多字符。某些字符类的断行由计数器控制。从\urlbiblatexbiblatex\biburlsetup记录biblatex, "4.10.3 用户定义的长度和计数器":

biburlnumpenalty如果将此计数器设置为大于零的值,biblatex将允许使用包\url中的命令格式化的所有字符串中的数字后换行url。这将影响参考书目中的 URL 和 DOI。断点将受到此计数器值的惩罚。如果参考书目中的 URL 和/或 DOI 超出边距,请尝试将此计数器设置为大于零但小于 10000 的值(通常希望使用 9000 这样的高值)。将计数器设置为零会禁用此功能。这是默认设置。

biburlucpenalty与类似biburlnumpenalty,只不过它会在所有大写字母后添加一个断点。

biburllcpenalty与类似biburlnumpenalty,不同之处在于它会在所有小写字母后添加一个断点。

一个例子:

\RequirePackage{filecontents}
\begin{filecontents}{bachelorarbeit_lit.bib}
@ONLINE{java96,
    author = {{Joe Black}},
    title = {Foobar 1.0},
    year = {1996},
    month = {1},
    url = {http://www.aaa.bb.cccc.dh/uploads/dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.pdf},
    urldate = {2011-03-02},
    sortname = {Sun},
    keywords = {www}
}
\end{filecontents}

\documentclass{scrreprt}

\usepackage[ngerman]{babel}                    
\usepackage[latin1]{inputenc}                
\usepackage[T1]{fontenc}

\usepackage[backend=biber]{biblatex}
\usepackage{url}

%%% --- The following two lines are what needs to be added --- %%%
\setcounter{biburllcpenalty}{7000}
\setcounter{biburlucpenalty}{8000}

\bibliography{bachelorarbeit_lit}

\begin{document}
Test \cite{java96}
\printbibliography
\end{document}

结果

答案2

还有另一种方法(更简短)来做到这一点:只需将下面的条目放在之前\begin{document}

\usepackage{url}
\def\UrlBreaks{\do\/\do-}

这使得您的定制(或要求!)参考书目样式(例如\bibliographystyle{IEEEtran})保持不变。

答案3

由于某种原因,接受的答案对我不起作用(可能是旧的软件包版本,我无法在工作中自行更新)。无论如何,因为我使用LuaLaTeX编译我的文档,这里是另一个解决方案(位于https://yingtongli.me/blog/2016/01/08/breaking-urls-anywhere-in-lualatex-even.html):

betterurl.lua创建一个包含以下内容的文档:

function betterurl(text)
  label = text:gsub(".", "%1\\allowbreak{}")

  label = label:gsub("~", "\\textasciitilde")
  label = label:gsub("&", "\\&")
  label = label:gsub("/", "/")
  label = label:gsub("-", "-")

  url = text

  tex.print("\\href{" .. url .. "}{" .. label .. "}")

end

并添加

\RequirePackage{luacode}
  \luaexec{require("path/to/betterurl")}
  \renewcommand{\url}[1]{\luadirect{
    betterurl(\luastringN{#1})
  }}

到你的序言中。请注意,你不需要添加文件扩展名.lua

结果如下:

在此处输入图片描述

答案4

所有这些对我都不起作用。
我的解决方案有效,但并不完美 - 有点像最后的手段(视觉上合适,但不是自动的)。

请注意,我使用了该bibtex格式,这也可能是问题所在。

您可以直接在内部定义 URL references.bib(或以您命名的任何 URL)。
您可能会有类似以下内容的内容:

@misc{a_very_consice_key,
  title = {A very nice title},
  urldate = {2023-11-19},
  howpublished = {https://www.example.com/aaaaaaaaa/bbbbbbbbb/ccccccccc/ddddddddd},
}

做这个:

@misc{a_very_consice_key,
  title = {A very nice title},
  urldate = {2023-11-19},
  howpublished = {\url{https://www.example.com/aaaaaaaaa/bbbbbbbbb/ccccccccc/ddddddddd}},
}

这已经起作用了......但可能会添加\texttt{}不适合其余文献的格式(对我来说它不适合),所以我添加了一些内容。

在你的 packages.tex 中(或者你定义包的任何位置):

\usepackage{hyperref}  % <- I had that 
\usepackage{xurl}      % <- I added that 

没有它也可以工作(稍微改变断点 - 也许你需要它)

现在我们定义一个新命令(我在我的definitions.tex

\newcommand{\normalurl}[1]{%
    \begingroup
    \let\UrlFont\relax
    \urlstyle{same} % use current font style
    \url{#1}%
    \endgroup
}

...并使用我们的新\normalurl命令代替文件\url内的命令.bib

@misc{a_very_consice_key,
  title = {A very nice title},
  urldate = {2023-11-19},
  howpublished = {\normalurl{https://www.example.com/aaaaaaaaa/bbbbbbbbb/ccccccccc/ddddddddd}},
}

我完全不明白这为什么是个问题。也许更有经验的人可以从中创建一个不会中断的功能,\url并且只会自动修复参考书目中的 URL?

URL 中确实不能有随机的破折号 ( -)。特别是如果软件包在后面biber添加了s。\href

相关内容