¿Cómo dividir URL largas utilizando la separación de palabras común pero agregando un indicador de avance de línea?

¿Cómo dividir URL largas utilizando la separación de palabras común pero agregando un indicador de avance de línea?

Vi varias preguntas comoÉsteque piden una solución paraseparar URL.

  1. Me pregunto si es posible dividir las palabras en una URL con guiones como ocurre en el texto normal (es decir, separar palabras con la ayuda del motor de separación de palabras).sin agregar guionessino un carácter especial), consulte el ejemplo 1.

    • Indicando avance de línea:Para evitar una interpretación engañosa de la URL con guión, me gustaría ver un carácter especial como elretorno de carrosímbolo en la posición de separación de palabras.
    • Guiones versus guiones:No quiero que el motor de separación de palabras inserte nuevos guiones que puedan malinterpretarse como parte de la URL.
  2. Si el motor de separación de palabras divide la URL en la posición de unestrellarse(el guión es parte de la URL), se debe insertar el carácter especial, ver ejemplo 2.

  3. Si el motor de separación de palabras divide la URL en la posición de unbarra oblicua(la barra diagonal es parte de la URL), el carácter especial debe insertarse en cualquier caso, ver ejemplo 3.

La separación de palabras deseada debería funcionar en párrafos, notas a pie de página y en la bibliografía.

Ejemplos:

(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

Trabajo relacionado:

  • Elsolución publicada por Peter Grillintrodujo un nuevo comando. Quiero usar el \urlcomando existente. Además, su solución divide las palabras en cada carácter, mientras que yo quiero confiar en la decisión del motor de separación de palabras utilizando la separación de palabras correcta.

Respuesta1

ingrese la descripción de la imagen aquí

Esto funciona para codificaciones T1 y OT1, necesitaría modificaciones para otras codificaciones (básicamente necesita algún carácter invisible para usarlo como un carácter de separación de palabras falso)

Como se puede ver, si no se agrega ninguna interrupción (primer ejemplo), no se agregarán flechas, o se agregarán flechas si se interrumpe después de la sintaxis de la URL /o .(segundo ejemplo) o en un punto de separación de palabras como en el ejemplo (tercer ejemplo).

Como se publicó, las flechas se pegan en el margen derecho; si prefiere que estén dentro del bloque de texto, elimínelas \rlapdel archivo \discretionary.

Además, como se publicó, esto define \brkurlque la pregunta solicita que se llame al comando, \urlsimplemente elimine globalmente brksi así lo desea.

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

información relacionada