\url 裡面的 \ 小寫

\url 裡面的 \ 小寫

為什麼是這個片段:

\newcommand{\Subject}{Skeleton}
\url{http://www.cheatsheet.jim.pm?subject=\lowercase{\Subject{}}}

渲染到這個?

http://www.cheatsheet.jim.pm?subject=\lowercase{Skeleton}

不是預期:

http://www.cheatsheet.jim.pm?subject=skeleton

答案1

\lowercase( 和{}) 不可擴展,因此您需要變更執行順序:

\documentclass{article}
\usepackage{url}

\newcommand{\Subject}{Skeleton}

\newcommand\lcURL[1]{%
  \edef\tmp{\lowercase{\noexpand\url{http://www.cheatsheet.jim.pm?subject=#1}}}%
  \tmp}

\begin{document}


\lcURL{\Subject}

\end{document}

如果您需要刪除空間,則需要使用擴張除非你不打算干涉\url。幸運的是,LaTeX 有一個內建指令可以透過擴充刪除空格:

\newcommand{\Subject}{Skeleton bones}
\makeatletter
\newcommand\lcURL[1]{%
  \edef\tmp{\lowercase{\noexpand\url{http://www.cheatsheet.jim.pm?subject=\zap@space#1 \@empty}}}%
  \tmp}
\makeatother

產生

http://www.cheatsheet.jim.pm?subject=skeletonbones

答案2

\StrSubstitute只是為了看看如何在這種情況下使用:

\documentclass{article}
\usepackage{url,xstring}

\newcommand{\Subject}{Ske Le Ton}

\newcommand\lcURL[1]{%
  \begingroup
  \StrSubstitute{#1}{ }{}[\tmp]%
    \edef\tmp{%
      \lowercase{%
        \endgroup
        \noexpand\url{http://www.cheatsheet.jim.pm?subject=\tmp}%
      }%
    }%
  \tmp
}

\begin{document}

X\lcURL{\Subject}X

X\url{http://www.cheatsheet.jim.pm?subject=skeleton}X

\end{document}

使用\begingroupand\endgroup我們確保任何定義\tmp在使用後消失。

在此輸入影像描述

相關內容