
Condición actual
Una URL larga se ve mal de la siguiente manera.
\documentclass{article}
\usepackage{xcolor,listings}
\lstset
{
language={[LaTeX]TeX},
backgroundcolor=\color{yellow!50},
breaklines=true,
}
\usepackage[colorlinks]{hyperref}
\def\InputCode#1#2{%
\lstinputlisting[caption=\href{#2}{#2}]{#1}}
\begin{document}
\minipage{0.5\linewidth}
\InputCode{\jobname.tex}{http://www.oakfurniturehouse.co.uk/userfiles/image/3B4K1820.jpg}
\endminipage
\end{document}
Resultado Esperado
Quiero recortar la parte izquierda hasta una cierta longitud medida desde la derecha de la siguiente manera. La parte recortada será reemplazada por ...
.
Cómo hacer esto automáticamente porque el minipage
ancho puede variar a lo largo de mi documento.
Respuesta1
Permítanme comenzar con algunas notas al margen:
- no lo use
\def
: en la interfaz es más cómodo de usarxparse
. - Deben evitarse combinaciones como
\minipage
--- .\endminipage
Usar\begin{minipage}
---\end{minipage}
.
Aquí una sugerencia utilizando los beneficios de expl3. Se utiliza el siguiente mecanismo:
- Guarde la URL en un
hbox
y compare el tamaño del cuadro con el ancho requerido. - Si el ancho de la URL es demasiado largo, la URL se guardará como una lista de tokens. Ahora se eliminará el primer token de la lista y el resultado se guardará dentro de un hbox. Y ahora mira 1.
Aquí el código:
\listfiles
\documentclass{article}
\usepackage{xcolor,listings}
\lstset
{
language={[LaTeX]TeX},
backgroundcolor=\color{yellow!50},
breaklines=true,
}
\usepackage[colorlinks]{hyperref}
\newlength\sideoffset
\setlength\sideoffset{2cm}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \InputCode { m m }
{
\lstinputlisting
[caption=\href{#2}{
\hbox_set:Nn \l_tmpa_box { #2 }
\dim_compare:nNnTF
{ \linewidth - 2\sideoffset} > { \box_wd:N \l_tmpa_box }
{%TRUE
#2
}
{%FALSE
\tl_set:Nx \l_tmpa_tl { \tl_tail:n { #2 } }
\hbox_set:Nn \l_tmpa_box { \tl_use:N \l_tmpa_tl }
\dim_while_do:nNnn { \box_wd:N \l_tmpa_box } > { \linewidth - 2\sideoffset}
{
\tl_set:Nx \l_tmpa_tl { \tl_tail:N \l_tmpa_tl }
\hbox_set:Nn \l_tmpa_box { \tl_use:N \l_tmpa_tl }
}
\ldots \tl_use:N \l_tmpa_tl
}
}
]
{#1}
}
\ExplSyntaxOff
\begin{document}
\begin{minipage}{0.5\linewidth}
\InputCode{\jobname.tex}{http://www.oakfurniturehouse.co.uk/userfiles/image/3B4K1820.jpg}
\end{minipage}
\end{document}