定理可选参数中的长 URL 不会中断(在 amsthm、hyperref、xurl 下)

定理可选参数中的长 URL 不会中断(在 amsthm、hyperref、xurl 下)

在大多数情况下,xurl包裹(提供这里) 确保长 URL 适当地跨行换行。然而,在定理的可选“caption”参数中,长 URL 保持完整,如下面的 MWE 所示。 有没有办法让它们在那里自动中断?

我的文档使用amsthmhyperref;MWE 使用xurl,但我的文档中并不需要这样做。问题是在定理环境的标题中启用换行符类似,但不涵盖 url(用于打破普通文本的长定理标题,使用 解决amsthm)。

\documentclass{amsart}

\usepackage{geometry}\geometry{textwidth=100mm}
\usepackage{blindtext}

\usepackage{amsthm}
\newtheorem{theorem}{Theorem}

\usepackage[colorlinks]{hyperref}
\usepackage{xurl}

\begin{document}

\blindtext[1]
\url{https://tex.stackexchange.com/questions/696129/long-url-doesn-t-break-in-theorem-optional-argument-under-amsthm-hyperref-xur}.
\blindtext[1]

\begin{theorem}[\url{https://tex.stackexchange.com/questions/696129/long-url-doesn-t-break-in-theorem-optional-argument-under-amsthm-hyperref-xur}]
  \blindtext[1]
\end{theorem}

\end{document}

答案1

问题在于 url 是数学。定理代码将可选参数存储在一个框中,然后稍后将其解开,但 TeX 在这种情况下会进行一些优化并省略隐式惩罚。您可以尝试该setouterhbox包:

\documentclass{amsart}

\usepackage{geometry}\geometry{textwidth=100mm}
\usepackage{blindtext}

\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\usepackage[colorlinks]{hyperref}
\usepackage{xurl}
\usepackage{setouterhbox}
\usepackage{etoolbox}

\begin{document}
\section{unpatched}

$a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=$

\begin{theorem}[$a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=$]
 some text
\end{theorem}


\begin{theorem}[\url{https://tex.stackexchange.com/questions/696129/long-url-doesn-t-break-in-theorem-optional-argument-under-amsthm-hyperref-xur}]
 some text
\end{theorem}

\section{patched}
\makeatletter
\patchcmd\deferred@thm@head{\sbox\@labels{\normalfont#1}}{\setouterhbox\@labels \normalfont#1\endsetouterhbox}{}{\fail}
\makeatother

\begin{theorem}[$a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=a=b=c=d=$]
 some text
\end{theorem}


\begin{theorem}[\url{https://tex.stackexchange.com/questions/696129/long-url-doesn-t-break-in-theorem-optional-argument-under-amsthm-hyperref-xur}]
 some text
\end{theorem}

\end{document}

在此处输入图片描述

答案2

您没有义务使用theorem环境的可选参数来放置 URL 字符串。

在此处输入图片描述

%如果 URL 字符串包含某些 TeX 特殊字符(例如或 ),则必须修改此方法#。在这种情况下,我建议采用\urldef该包用户指南第 2 节url“定义已定义的 URL”中所述的路线。或者只需将其替换\myurl{...}\begingroup\upshape(\url{...})\endgroup


\documentclass{amsart}

\usepackage[textwidth=100mm]{geometry}
\usepackage{lipsum}
% \usepackage{amsthm} % 'amsthm' is loaded automatically by 'amsart' doc. class
\newtheorem{theorem}{Theorem}
\usepackage{xurl}
\usepackage[colorlinks,allcolors=blue]{hyperref}
\newcommand\myurl[1]{\begingroup\upshape(\url{#1})\endgroup}

\begin{document}

\begin{theorem} 
\myurl{https://tex.stackexchange.com/questions/696129/long-url-doesn-t-break-in-theorem-optional-argument-under-amsthm-hyperref-xur}
\lipsum[1][1-5] % filler text
\end{theorem}

\end{document}

相关内容