使用 natbib 强制在参考书目中换行

使用 natbib 强制在参考书目中换行

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,则应使用\urlURL 命令。因此,在您的.bst文件中,您需要的\url{<url>}不是简单的<url>

但即便如此,问题仍然存在,如果 URL 没有足够的可能断点,则很难将其断开。默认情况下,\url只会在各种标点符号(如 , )处断开 URL ./如果您的 URL 有大量没有此类标点符号的延伸,则连字符可能会非常棘手。(默认情况下,URL 不会在此处断开,-以避免与实际连字符混淆。)强制在 \url 中换行显示了许多在 URL 中获取换行符的可能解决方案。

对于许多 URL 来说,允许在连字符处换行就足够了

\usepackage[hyphens]{url}

在加载之前hyperrefurl。但这并不总是足够的。

最彻底的解决方案是加载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。通常 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。

相关内容