
目前的狀況
長 URL 看起來很糟糕,如下所示。
\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}
預期結果
我想將左側部分修剪到從右側測量的一定長度,如下所示。被修剪的部分將被替換...
。
如何自動執行此操作,因為minipage
整個文件的寬度可能會有所不同。
答案1
讓我從一些旁注開始:
- 不要使用
\def
-在前端使用起來更舒服xparse
。 - 應避免類似
\minipage
--- 的組合。\endminipage
使用\begin{minipage}
- -\end{minipage}
。
這裡有一個使用 expl3 優點的建議。使用以下機制:
- 將 url 儲存在 a 中
hbox
,並將方塊與所需寬度進行比較。 - 如果 url 的寬度太長,則會將 url 儲存為令牌清單。現在清單中的第一個標記將被刪除,結果將保存在 hbox 中。現在看1。
這裡的程式碼:
\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}