\строчные буквы внутри \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}

С помощью \begingroupи \endgroupмы гарантируем, что любое определение \tmpисчезнет после использования.

введите описание изображения здесь

Связанный контент