如何使用常见的连字符但添加换行指示符来断开长 URL?

如何使用常见的连字符但添加换行指示符来断开长 URL?

我看到了几个问题这个请求解决方案拆分 URL

  1. 我想知道是否可以像在普通文本中那样对 URL 中的单词进行连字符连接(即在连字符引擎的帮助下将单词分开不添加连字符而是一个特殊字符),见示例 1。

    • 指示换行:为了避免对带连字符的 URL 产生误解,我希望看到一个特殊字符,例如回车连字符位置处的符号。
    • 连字符与破折号:我不希望连字符引擎插入可能被误解为 URL 一部分的新连字符。
  2. 如果断字引擎在以下位置断开 URL:短跑(破折号是 URL 的一部分),无论如何都必须插入特殊字符,参见示例 2。

  3. 如果断字引擎在以下位置断开 URL:削减(斜线是 URL 的一部分),无论如何都必须插入特殊字符,参见示例 3。

所需的连字符应适用于段落、脚注和参考书目。

例子:

(1) http://www.w3.org/hypertext-transport-protocol/secure/test/appli↩
cationformular.html

(2) http://www.w3.org/hypertext-transport-↩
protocol/secure/test/applicationformular.html

(3) http://www.w3.org/hypertext-transport-protocol/secure/↩
test/applicationformular.html

相关工作:

  • Peter Grill 发布的解决方案引入了新命令。我想使用现有命令\url。此外,他的解决方案会在每个字符处断词,而我想依靠连字引擎的决定来使用正确的连字。

答案1

在此处输入图片描述

这适用于 T1 和 OT1 编码,对于其他编码需要进行修改(基本上需要一些不可见字符作为假连字符)

可以看出,如果没有添加换行符(第一个例子),则不会添加箭头,或者如果在 URL 语法之后换行(第二个例子),或者在连字符点处换行(例如(第三个例子),则会/添加.箭头

正如所发布的,箭头插入右边距,如果您希望它们位于文本块内,请从中\rlap删除\discretionary

另外,正如发布的那样,这定义了\brkurl问题要求调用命令,如果需要的话,\url只需全局删除。brk

\documentclass{article}

%\tracingonline1
%\showboxbreadth=200
%\showboxdepth=200

\begin{document}

\def\addurlspace#1{%
\ifx\relax#1%
\else
\ifx/#1\space\fi
\ifx.#1\space\fi
#1%
\ifx/#1\space\fi
\ifx.#1\space\fi
\expandafter\addurlspace
\fi}



\makeatletter

\@namedef{OT1-zwidthchar}{255}
\@namedef{T1-zwidthchar}{"17}

\def\brkurl#1{%
\edef\savedhchar{\the\hyphenchar\font}%
\global\setbox1\hbox{}%
\setbox0=\vbox{\hsize=2pt\rightskip=0pt plus 1fill
\hfuzz\maxdimen
\tracinglostchars0
\overfullrule0pt
\hyphenchar\font=\csname \f@encoding-zwidthchar\endcsname
\noindent \hskip0pt \addurlspace #1\relax
\par
\loop
\setbox4 \lastbox
\ifvoid4 \else
\global\setbox1\hbox{\unhbox4\unskip\unskip\discretionary{\hbox{\rlap{$\leftarrow$}}}{}{}\unhbox1}%
\unskip
\unskip
\unpenalty
\unskip
\repeat
}%
\unhbox1 
\hyphenchar\font\savedhchar
\relax}

\makeatother





 some text \brkurl{http://www.example.com/this/directory/here}
 some text \brkurl{http://www.example.com/this/directory/here} some text 
 some text \brkurl{http://www.example.com/this/directory/here} some text 

\end{document}

相关内容