更新 1

更新 1

我正在生成一个出版物列表,但在书目中遇到了换行符问题,如下所示:

在此处输入图片描述

我希望文本在右边缘对齐,并且在这些零之间应该插入换行符。这是一个故意构造的示例。现实生活中的情况也包含一个 doi,其末尾有一个长数字,如果没有换行符,看起来会很难看。这不是超链接或 url 包的问题;我也可以在行末看到一个长页码。

所以我的问题是如何在这里插入换行符。我正在使用具有 plain 和 abbrev 样式的 bibtex。我可以接受自定义 plain.bst 或 abbrev.bst 的解决方案。

这是示例。我不认为它是最小的,但我还希望该解决方案与加载的其他包兼容。请注意,我在字段中输入了 doi note,以便纯样式可以显示 doi。

谢谢!

编译顺序:

latex mwe.tex
bibtex mew.tex
latex mwe.tex

mwe.tex:

\documentclass[12pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{setspace}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{anyfontsize}
\usepackage[compact]{titlesec}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{mdframed}
\usepackage{showexpl}
\usepackage{enumitem}
\usepackage{lastpage}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage[autostyle, english = american]{csquotes}
\MakeOuterQuote{"}
\usepackage{seqsplit}


% to avoid crash of hyperlink and bibentry
\usepackage{bibentry}
\makeatletter\let\saved@bibitem\@bibitem\makeatother
\usepackage[colorlinks=true,breaklinks]{hyperref}
\makeatletter\let\@bibitem\saved@bibitem\makeatother


\usepackage{hanging}
\newcommand\publication[1]{%
    \smallskip\par\hangpara{1.5em}{1}\bibentry{#1}\smallskip
}

\begin{document}

% bibliography
\bibliographystyle{abbrv}
% \bibliographystyle{plain}
\nobibliography{mwe}

\begin{enumerate}
\item \publication{test}
\end{enumerate}

\end{document}

论坛

@article{test,
  title = {The annoying Bibtex problem: why the line break is not inserted properly?},
  volume = {1},
  number = {1},
  journal = {Journal},
  note = {\href{http://dx.doi.org/10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}{doi: 10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}},
  author = {\underline{John Walker} and Smith, Adam},
  month = Jan,
  year = {2020},
  pages = {1000}
}

更新 1

Don Hosek 给出了两种解决方案。(顺便说一句,谢谢)

  1. \sloppy 我使用以下命令代替枚举环境
\sloppy
\emergencystretch=1em

\begin{enumerate}
\item \publication{test}
\end{enumerate}

结果如下 在此处输入图片描述

您可以看到它确实解决了换行的问题,但更像是 Microsoft Word 而不是 LaTeX。

  1. 手动添加\allowbreak 这不是自动化解决方案。我会定期从 Zotero 更新参考资料,\allowbreak每次都需要插入。插入的位置\allowbreak在普通和缩写样式之间可能不同。

虽然它可以解决问题,但我觉得解决方案不是自动化的。

更新 2

Guido 的解决方案(采自 Mico)解决了我的问题。

添加 xurl 包

\usepackage{xurl}

并将网址括在\url

note = {\href{http://dx.doi.org/10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}{\url{doi: 10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}}}

结果:

在此处输入图片描述

答案1

可以使用该xurl包来(在任意位置自动)中断 URL(或类似条目),并且\url可以在用于显示和超链接的参数内使用该命令\href。因此,note原始帖子中的字段可以更改为

note = {\href{http://dx.doi.org/10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}
        {\url{doi: 10.0000/Journal.000000000000000000000000000000000000000000000000000000000000}}}

使用提供的 MWE 得出:

在此处输入图片描述

答案2

这里有两种方法可以采用。一种是使用\sloppy在参考书目前使用,这将允许 LaTeX 插入比正常情况下更宽的空格,以便在 10.000/Journal 之前留出一个空格ETC您可能还想设置\emergencystretch=1em允许 LaTeX 不仅仅将所有多余的空格都转储在一行上。

您可以做的另一件事是\allowbreak在数字字符串中间插入,以允许 LaTeX 在数字中间的点处进行中断\allowbreak

相关内容