Como quebrar URLs longos usando hifenização comum, mas adicionando um indicador de feed de linha?

Como quebrar URLs longos usando hifenização comum, mas adicionando um indicador de feed de linha?

Eu vi várias perguntas comoEsteque solicitam uma solução paraseparando URLs.

  1. Gostaria de saber se é possível hifenizar as palavras num URL como acontece num texto normal (isto é, separar as palavras com a ajuda do motor de hifenizaçãosem adicionar hífensmas um caractere especial), veja o exemplo 1.

    • Indicando avanço de linha:Para evitar uma interpretação enganosa do URL hifenizado, gostaria de ver um caractere especial como oretorno de carrosímbolo na posição de hifenização.
    • Hífens versus travessões:Não quero que o mecanismo de hifenização insira novos hifens que possam ser mal interpretados como parte do URL.
  2. Se o mecanismo de hifenização quebrar o URL na posição de umtraço(o travessão faz parte da URL), o caractere especial deve ser inserido de qualquer forma, veja exemplo 2.

  3. Se o mecanismo de hifenização quebrar o URL na posição de umgolpear(a barra faz parte da URL), deve ser inserido qualquer caractere especial, veja exemplo 3.

A hifenização desejada deverá funcionar nos parágrafos, notas de rodapé e na bibliografia.

Exemplos:

(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

Trabalho relatado:

  • Osolução postada por Peter Grillintroduziu um novo comando. Quero usar o \urlcomando existente. Além disso, sua solução quebra palavras em cada caractere, enquanto eu quero confiar na decisão do mecanismo de hifenização usando a hifenização correta.

Responder1

insira a descrição da imagem aqui

Isso funciona para codificações T1 e OT1, precisaria de modificação para outras codificações (basicamente precisa de algum caractere invisível para usar como um caractere de hifenização falso)

Como pode ser visto se nenhuma quebra for adicionada (primeiro exemplo) nenhuma seta, ou setas serão adicionadas se houver quebra após a sintaxe da URL /ou .(segundo exemplo) ou em um ponto de hifenização como exemplo (terceiro exemplo)

Conforme postado, as setas ficam na margem direita, se você preferir que fiquem dentro do bloco de texto, remova-as \rlapdo \discretionary.

Também conforme postado, isto define \brkurla pergunta que pede que o comando seja chamado \urlapenas delete globalmente, brkse desejar.

\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}

informação relacionada