Как разбить длинные 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

Связанных с работой:

  • Theрешение опубликовано Питером Грилломввел новую команду. Я хочу использовать существующую \urlкоманду. Кроме того, его решение разрывает слова на каждом символе, в то время как я хочу положиться на решение движка переносов, используя правильные переносы.

решение1

введите описание изображения здесь

Это работает для кодировок T1 и OT1, для других кодировок потребуется модификация (по сути, нужен какой-то невидимый символ для использования в качестве поддельного символа переноса)

Как можно увидеть, если разрыв не добавлен (первый пример), то стрелка не добавляется, или стрелки будут добавлены, если разрыв происходит после синтаксиса URL /или .(второй пример) или в точке переноса, например, example-ple (третий пример)

В опубликованном виде стрелки располагаются на правом поле. Если вы предпочитаете, чтобы они находились внутри текстового блока, удалите \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}

Связанный контент