이 스니펫이 있는 이유는 다음과 같습니다.
\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
.