\url 内的 \lowercase

\url 内的 \lowercase

为什么是这个片段:

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

使用\begingroup\endgroup我们确保的任何定义\tmp在使用后都会消失。

在此处输入图片描述

相关内容