答案1
这是一个需要一些手动干预的解决方法。首先是代码:
\documentclass{article}
\usepackage{doi}
\makeatletter
\def\@doi#1{%
\let\#\relax
\let\_\relax
\let\textless\relax
\let\textgreater\relax
\edef\x{\toks0={{#1}}}%
\x
\edef\#{\@percentchar23}%
\edef\_{_}%
\edef\textless{\@percentchar3C}% instead of {\string<} for Apple
\edef\textgreater{\@percentchar3E}% instead of {\sting>} for Apple
\begingroup %%% <----- begin modification
\edef\allowbreak{}
\edef\x{\endgroup\toks2={\noexpand\href{\doiurl#1}}}% <----- end modification
\x
\edef\x{\endgroup\doitext\the\toks2 \the\toks0}%
\x
}
\makeatother
\begin{document}
\begin{minipage}{2in}
\doi{really.long.line.#really_\allowbreak .long.line<test>.line/10.29345}
\end{minipage}
\end{document}
该\@doi
命令来自doi
包的内部。我所做的是添加一行额外的逻辑:在为超链接生成清理后的 URL 时,代码会删除对 的任何调用\allowbreak
。这允许您手动插入显示的 URL 的允许断点作为 DOI 字符串的一部分。
xurl
如果您知道要在哪里设置断点,那么这可以实现自动化:可以借用或breakurl
或的代码url
在特定字符处插入断点。我将把这个留给其他人。