%20k%C3%BCrzen%3F.png)
Derzeitige Zustand
Eine lange URL macht aus folgendem Grund keinen guten Eindruck.
\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 ...
.
Wie mache ich das automatisch, da die minipage
Breite im gesamten Dokument variieren kann?
Antwort1
Lassen Sie mich mit einigen Randbemerkungen beginnen:
- nicht verwenden
\def
– Im Frontend ist es komfortabler zu verwendenxparse
. - Kombinationen wie
\minipage
---\endminipage
sollten vermieden werden. Verwenden Sie\begin{minipage}
---\end{minipage}
.
Hier ein Vorschlag, die Vorteile von expl3 zu nutzen. Dabei kommt folgender Mechanismus zum Einsatz:
- Speichern Sie die URL in einer
hbox
und vergleichen Sie die Breite der Box mit der erforderlichen Breite. - 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}