Latex 不会在长 URL 后换行。但是,如果 URL 中有“-”或“/”,则不会出现这种情况。如 MWE 中所示,我使用的是 bibulous 和 natbib。我查看了此表格和其他表格上的几种解决方案,但都没有奏效。
\documentclass[11pt, a4papter] {scrartcl}
\usepackage{natbib}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents*}{svenz.bst}
TEMPLATES:
book = [<au>.] [\textit{\enquote{<title>}}.] [<address> <year>.]
electronic = [<au>.] [\textit{<institution>.}] [<date>.] [\enquote{<title>}.] [<url>.] [<dateofchange>.] [<urldate>.]
oral = [<au>.] [<interviewer>,] [<date>,] [<address>.]
inbook = [<au>.] [\enquote{<title>}.] [In: <booktitle>,] hg. v. [<publisher>.] [<address>] [<place>.] [<pages>.]
article = [<au>.] [\enquote{<title>}.] [\textit{<journal>,] [<year>,] [<number>,}] [<pages>.]
SPECIAL-TEMPLATES:
citelabel = <authorlist.0.last>, <year>
sortkey = <authorlist.0.last><year>
OPTIONS:
namelist_format = last_name_first
use_firstname_initials = False
\end{filecontents*}
\begin{filecontents}{\jobname.bib}
@Electronic{gehalt,
author = {Rütti, Nicole},
institution = {NZZ Online},
year = {2017},
date = {2017-07-27},
title = {Sind Frauen wirklich selber schuld am tieferen Gehalt?},
url = {https://www.nzz.ch/wirtschaft/frauenundlohnverhandlungenaufstoeckelschuhenrueckwaertsuebereinminenfeldlaufenlddfaedafeadfeadfeasfeiasnddskfjeidlkajfeiadkje.1307984},
urldate = {2018-10-14},
}
@Electronic{ackeret,
author = {Ackeret, Markus},
institution = {NZZ Online},
year = {2017},
date = {2017-05-25},
title = {Im Übereifer des politischen Gefechts},
url = {https://www.nzz.ch/international/debatte-umasfdlkajsdfiojaweklfjasdiasdfkjasldfjiejklasdjfie-die-bundeswehr-im-uebereifer-des-politischen-gefechts-ld.1296154},
urldate = {2018-10-14},
}
@Electronic{Lenz1,
author = {Lenz, Christoph},
institution = {Tages-Anzeiger Online},
year = {2017},
date = {2017-07-04},
title = {Rechenspiele der Armee haben politische Folgen},
url = {https://www.tagesanzeiger.ch/schweiz/standard/rechenspiele-dasdfkjasdifasdlkfjasiofjasdklfjieklkjadikeidjadlskfjei19945957},
urldate = {2018-10-16},
}
\end{filecontents}
\begin{document}
Lorem ipsum dolor sit amet, \citet{gehalt} consetetur sadipscing elitr,
\cite{Lenz1}. Lorem ipsum dolor sit amet. \cite{ackeret}
\bibliographystyle{svenz}
\bibliography{\jobname}
\end{document}
如何在 URL 较长后自动中断?
答案1
LaTeX 很难断开 URL,因为它们看起来不像普通文本或单词,LaTeX 无法通过其连字符算法和模式断开它们。如果 URL 恰好在方便的位置有一个-
或/
,则可以方便地进行换行,但这并不总是有保证的。当 LaTeX 读取时,frauenundlohnverhandlungenaufstoeckelschuhenrueckwaertsuebereinminenfeldlaufenlddfaedafeadfeadfeasfeiasnddskfjeidlkajfeiadkje
它会迷失方向,不知道在哪里给那个“单词”加上连字符。
如果您希望链接您的 URL,则应使用\url
URL 命令。因此,在您的.bst
文件中,您需要的\url{<url>}
不是简单的<url>
。
但即便如此,问题仍然存在,如果 URL 没有足够的可能断点,则很难将其断开。默认情况下,\url
只会在各种标点符号(如 , )处断开 URL .
。/
如果您的 URL 有大量没有此类标点符号的延伸,则连字符可能会非常棘手。(默认情况下,URL 不会在此处断开,-
以避免与实际连字符混淆。)强制在 \url 中换行显示了许多在 URL 中获取换行符的可能解决方案。
对于许多 URL 来说,允许在连字符处换行就足够了
\usepackage[hyphens]{url}
在加载之前hyperref
或url
。但这并不总是足够的。
最彻底的解决方案是加载xurl
包。该xurl
包允许在 URL 中的任何位置换行。这种方法的缺点是,如果 URL 中的单词不会根据连字符规则断开,那么你最终可能会得到
https://www.nzz.ch/wirtschaft/frauenundlohnverhandlunge
naufstoeckelschuhenrueckwaertsuebereinminenfeldlaufen
代替
https://www.nzz.ch/wirtschaft/frauenundlohnverhandlungen
aufstoeckelschuhenrueckwaertsuebereinminenfeldlaufen
但是我不知道有任何解决 URL 断点的方案可以解析 URL 中的实际单词(如果存在)并根据单词连字和单词边界选择断点。
\documentclass[11pt, a4papter] {scrartcl}
\usepackage{natbib}
\usepackage{xurl}
%\usepackage[hyphens]{url}
\usepackage{hyperref}
\urlstyle{same}
\usepackage{filecontents}
\begin{filecontents*}{svenz.bst}
TEMPLATES:
book = [<au>.] [\textit{\enquote{<title>}}.] [<address> <year>.]
electronic = [<au>.] [\textit{<institution>.}] [<date>.] [\enquote{<title>}.] [\url{<url>}.] [<dateofchange>.] [<urldate>.]
oral = [<au>.] [<interviewer>,] [<date>,] [<address>.]
inbook = [<au>.] [\enquote{<title>}.] [In: <booktitle>,] hg. v. [<publisher>.] [<address>] [<place>.] [<pages>.]
article = [<au>.] [\enquote{<title>}.] [\textit{<journal>,] [<year>,] [<number>,}] [<pages>.]
SPECIAL-TEMPLATES:
citelabel = <authorlist.0.last>, <year>
sortkey = <authorlist.0.last><year>
OPTIONS:
namelist_format = last_name_first
use_firstname_initials = False
\end{filecontents*}
\begin{filecontents}{\jobname.bib}
@Electronic{gehalt,
author = {Rütti, Nicole},
institution = {NZZ Online},
year = {2017},
date = {2017-07-27},
title = {Sind Frauen wirklich selber schuld am tieferen Gehalt?},
url = {https://www.nzz.ch/wirtschaft/frauenundlohnverhandlungenaufstoeckelschuhenrueckwaertsuebereinminenfeldlaufenlddfaedafeadfeadfeasfeiasnddskfjeidlkajfeiadkje.1307984},
urldate = {2018-10-14},
}
@Electronic{ackeret,
author = {Ackeret, Markus},
institution = {NZZ Online},
year = {2017},
date = {2017-05-25},
title = {Im Übereifer des politischen Gefechts},
url = {https://www.nzz.ch/international/debatte-umasfdlkajsdfiojaweklfjasdiasdfkjasldfjiejklasdjfie-die-bundeswehr-im-uebereifer-des-politischen-gefechts-ld.1296154},
urldate = {2018-10-14},
}
@Electronic{Lenz1,
author = {Lenz, Christoph},
institution = {Tages-Anzeiger Online},
year = {2017},
date = {2017-07-04},
title = {Rechenspiele der Armee haben politische Folgen},
url = {https://www.tagesanzeiger.ch/schweiz/standard/rechenspiele-dasdfkjasdifasdlkfjasiofjasdklfjieklkjadikeidjadlskfjei19945957},
urldate = {2018-10-16},
}
\end{filecontents}
\begin{document}
Lorem ipsum dolor sit amet, \citet{gehalt} consetetur sadipscing elitr,
\cite{Lenz1}. Lorem ipsum dolor sit amet. \cite{ackeret}
\bibliographystyle{svenz}
\bibliography{\jobname}
\end{document}
尤其是如果你打算打印你的作品,我强烈建议你尝试确保你提供的 URL 是尽可能短的可用 URL。通常 URL 可能包含冗余或一次性信息,如会话 ID 或标题。以这个问题为例。我的浏览器中显示的 URL 是
https://tex.stackexchange.com/questions/458049/forcing-linebreak-in-bibliography-with-natbib
但当我生成问题的“分享”链接时,我获得了
https://tex.stackexchange.com/q/458049/35864
最后一位只是我的用户 ID,用于链接跟踪,因此实际的最小链接是
https://tex.stackexchange.com/q/458049
如果您恰好只有文档的打印版本,那么输入起来会容易得多,而且由于它较短,因此换行效果也更好。
您的屏幕截图中的 URL(不在 MWE 中)包含一个PHPSESSID
可能被删除的会话 ID。