我正在生成一个出版物列表,但在书目中遇到了换行符问题,如下所示:
我希望文本在右边缘对齐,并且在这些零之间应该插入换行符。这是一个故意构造的示例。现实生活中的情况也包含一个 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 给出了两种解决方案。(顺便说一句,谢谢)
\sloppy
我使用以下命令代替枚举环境
\sloppy
\emergencystretch=1em
\begin{enumerate}
\item \publication{test}
\end{enumerate}
您可以看到它确实解决了换行的问题,但更像是 Microsoft Word 而不是 LaTeX。
- 手动添加
\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
。