如何使用某些字符作为 xurl 的换行符?

如何使用某些字符作为 xurl 的换行符?

xurl是一个很好的解决方案。

以下是这段话的引文:

包 xurl 默认加载包 url,并为所有字母数字字符和 = / . : * - ~ ' " 定义可能的 url 中断

如何添加下划线 = / . : * - ~ ' " 和 _ 作为首选字符来打破以下url

https://www.weibull.com/pubs/2011_RAMS_planning_a_reliability_growth_program_utilizing_historical_data.pdf

只有在迫不得已的情况下才应断言。

显示问题的最少代码:

\documentclass{minimal}
\usepackage{xurl}
\begin{document}
Here is the url \url{https://www.weibull.com/pubs/2011_RAMS_planning_a_reliability_growth_program_utilizing_historical_data.pdf}.

\end{document}

答案1

理论上,除了其他可能的断点之外,还可以允许在 , , 之后换行,但惩罚会更严厉(这意味着 LaTeX 将更喜欢其他连字符点A-Za-z0-9\url

不过,我怀疑这会产生与直接加载截然不同的效果xurl,后者允许在任何地方以相同的惩罚进行换行。如果 URL 占据了行的很大一部分,则可能没有多少空间可以缩小和放大,这意味着 TeX 在决定换行位置时几乎没有回旋余地:URL 要么可以在与边距相交的地方换行,要么不换行。

无论如何,这是如何biblatex做到的

\documentclass{article}
\usepackage{url}
\usepackage{lipsum}

\mathchardef\UrlNotSoGreatBreakPenalty=800 

\usepackage{etoolbox}
\begingroup
\def\do#1{%
  \gappto\UrlSpecials{%
    \do#1{%
      \mathchar`#1
      \penalty\UrlNotSoGreatBreakPenalty}}}
\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
  \do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T
  \do\U\do\V\do\W\do\X\do\Y\do\Z
\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t
  \do\u\do\v\do\w\do\x\do\y\do\z
\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0
\endgroup


\begin{document}
\lipsum[1]

Text \url{https://www.weibull.com/pubs/2011_RAMS_planning_a_reliability_growth_program_utilizing_historical_data.pdf}.

\lipsum[2]
\end{document}

网址损坏

A-Z这将对、 、之后不太严重的断句罚 800 分a-z0-9标点符号后的断句罚 700 分,:标点符号后的大断句罚 500 分。


您可以按照建议留出一些可伸缩空间乌尔丽克·菲舍尔回答长 URL 中的“不均匀”中断(\url)(已经被无耻地窃取了biblatexhttps://github.com/plk/biblatex/issues/850https://github.com/plk/biblatex/pull/886)。这样可以让您的 URL 在更合适的位置断开,但代价是字符之间的空格更多一些。

\documentclass{article}
\usepackage{url}
\usepackage{lipsum}

\mathchardef\UrlNotSoGreatBreakPenalty=800 

\newmuskip\urlalnumskip
\setlength{\urlalnumskip}{0mu plus 2mu}

\usepackage{etoolbox}


\begingroup
\def\do#1{%
  \gappto\UrlSpecials{%
    \do#1{%
      \mathchar`#1
      \mskip\urlalnumskip
      \penalty\UrlNotSoGreatBreakPenalty}}}
\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
  \do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T
  \do\U\do\V\do\W\do\X\do\Y\do\Z
\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t
  \do\u\do\v\do\w\do\x\do\y\do\z
\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0
\endgroup


\begin{document}
\lipsum[1]

Text \url{https://www.weibull.com/pubs/2011_RAMS_planning_a_reliability_growth_program_utilizing_historical_data.pdf}.

\lipsum[2]
\end{document}

完美破损但有间隔的 URL。

请注意,第一行中的字符是如何间隔开相当远的,以便能够实现更好的间隔。

如果您仔细研究惩罚和可拉伸空间,您会发现,只有当可拉伸空间能够给予惩罚足够的余地时,惩罚才会产生实际效果。

答案2

这将创建一个\url允许在指定字符处中断的命令,这里给出的字符是/._

\documentclass{article}
\usepackage[pass,showframe]{geometry}
\catcode`_=12 
\newcommand{\url}[1]{%
  \begingroup
  \ttfamily
  \begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\penalty0 }%
  \begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\penalty0 }%
  \begingroup\lccode`~=`_\lowercase{\endgroup\def~}{_\penalty0 }%
  \catcode`/=\active\catcode`.=\active\catcode`_=\active
  \scantokens{#1\noexpand}%
  \endgroup
}
\catcode`_=8 
\begin{document}
Here is the url \url{https://www.weibull.com/pubs/2011_RAMS_planning_a_reliability_growth_program_utilizing_historical_data.pdf}.
\end{document}

在此处输入图片描述

相关内容