오른쪽에서 측정한 특정 길이까지 URL을 자동으로 자르는 방법은 무엇입니까?

오른쪽에서 측정한 특정 길이까지 URL을 자동으로 자르는 방법은 무엇입니까?

현재 상태

긴 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의 이점을 활용한 제안은 다음과 같습니다. 다음 메커니즘이 사용됩니다.

  1. URL을 a에 저장하고 hbox상자의 너비와 필요한 너비를 비교합니다.
  2. 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}

관련 정보