Wie kann ich eine URL automatisch bis zu einer bestimmten Länge (von rechts gemessen) kürzen?

Wie kann ich eine URL automatisch bis zu einer bestimmten Länge (von rechts gemessen) kürzen?

Derzeitige Zustand

Eine lange URL macht aus folgendem Grund keinen guten Eindruck.

Bildbeschreibung hier eingeben

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

erwartetes Ergebnis

Ich möchte den linken Teil bis zu einer bestimmten Länge von rechts gemessen wie folgt kürzen. Der gekürzte Teil wird durch ersetzt ....

Bildbeschreibung hier eingeben

Wie mache ich das automatisch, da die minipageBreite im gesamten Dokument variieren kann?

Antwort1

Lassen Sie mich mit einigen Randbemerkungen beginnen:

  • nicht verwenden \def– Im Frontend ist es komfortabler zu verwenden xparse.
  • Kombinationen wie \minipage--- \endminipagesollten vermieden werden. Verwenden Sie \begin{minipage}--- \end{minipage}.

Hier ein Vorschlag, die Vorteile von expl3 zu nutzen. Dabei kommt folgender Mechanismus zum Einsatz:

  1. Speichern Sie die URL in einer hboxund vergleichen Sie die Breite der Box mit der erforderlichen Breite.
  2. Wenn die Breite der URL zu lang ist, wird die URL als Tokenliste gespeichert. Jetzt wird das erste Token der Liste entfernt und das Ergebnis in einer Hbox gespeichert. Und jetzt siehe 1.

Hier der Code:

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

verwandte Informationen