
Condição atual
Um URL longo dá uma aparência ruim da seguinte maneira.
\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
Quero aparar a parte esquerda até um determinado comprimento medido a partir da direita, como segue. A parte aparada será substituída por ...
.
Como fazer isso automaticamente porque a minipage
largura pode variar ao longo do meu documento.
Responder1
Deixe-me começar com algumas notas laterais:
- não use
\def
– No frontend é mais confortável de usarxparse
. - Combinações como
\minipage
---\endminipage
devem ser evitadas. Usar\begin{minipage}
---\end{minipage}
.
Aqui está uma sugestão usando os benefícios do expl3. O seguinte mecanismo é usado:
- Salve a url em a
hbox
e compare o tamanho da caixa com a largura necessária. - Se a largura do URL for muito longa, o URL será salvo como uma lista de tokens. Agora o primeiro token da lista será removido e o resultado será salvo dentro de um hbox. E agora veja 1.
Aqui o 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}