\documentclass{article} \usepackage{etex} \usepackage{xifthen} \usepackage[ascii]{inputenc} \usepackage[T1]{fontenc} \usepackage[warn]{textcomp} \usepackage[a4paper, pdftex, margin=1.5in]{geometry} \usepackage{lmodern} \usepackage{typetex} \usepackage{cmdstring} \usepackage{microtype} \usepackage{xcolor} \usepackage{url} \usepackage[bottom,hang]{footmisc} \usepackage[babel]{csquotes} \usepackage[british]{babel} \usepackage{hyperref} \setcounter{secnumdepth}{-\maxdimen} \newcommand*{\pack}{\textsf} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand*{\setdate}{} \def \setdate #1/#2/#3#4{% \year = #1 \month = #2 \day = #3#4 } \makeatletter \newcommand*{\getfileinfo}[1]{% \def \filename {#1}% \def \@tempb ##1 ##2 ##3\relax ##4\relax {% \def \filedate {##1}% \def \fileversion {##2}% \def \fileinfo {##3}% }% \edef \@tempa {\csname ver@#1\endcsname}% \expandafter \@tempb \@tempa \relax ? ? \relax \relax } \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title {The \pack{cmdstring} Package} \author {Josselin Noirel} \date {% \getfileinfo{cmdstring.sty} \expandafter \setdate \filedate \today\ (\fileversion)} \begin{document} \maketitle \begin{abstract} For programmers, it is quite common to use the \emph{name} of a~macro (for instance `foo' for the macro \cmd{foo}, in other words, the letters \emph{f}, \emph{o}, and~\emph{o}). For this purpose, it is customary to call \cmd{string} which does this sort of things\dots\ except that it prepends the escape character, controlled by the counter \cmd{escapechar}, in front of the name. The traditional ways of getting rid of it, is to set \cmd{escapechar} to~$-1$ (without forgetting to restore the proper value at the end of the process) or to make use of \cmd{@gobble}. The former has the drawback not to be expandible while the second isn't completely reliable. Here we extend the expandible methods to make it reliable. \end{abstract} Use this package with % \begin{texcode} \cmd[1]{usepackage}{cmdstring} \end{texcode} or \begin{texcode} \cmd[1]{RequirePackage}{cmdstring} \end{texcode} % Then whatever the value of \cmd{escapechar}, \tex{\cmd{cmdstring} {\meta{command}}} will give correct result. For instance `\tex{\cmd{cmdstring}~\cmd{documentclass}}' gives `\cmdstring \documentclass'; `\tex{\cmd{cmdstring}~\cmd{\\}}' gives `\cmdstring \\; `\tex{\cmd{cmdstring}~\cmd{\SPACE}}' gives `\cmdstring \ ', i.e., the command name without the escape~character. \newpage A~small test can be performed for all representative values of \cmd{escapechar} % \begin{texcode} \cmd{count}255 = -11 \newline \cmd{loop} \cmd{escapechar} = \cmd{count}255 \newline \ \ [\cmd{cmdstring} \cmd{documentclass}] \newline \ \ [\cmd{cmdstring} \cmd{\\}] \newline \ \ [\cmd{cmdstring} \cmd{\ }] \newline \ \ \cmd{ifnum} \cmd{count}255 < 300 \cmd{advance} \cmd{count}255 by 1 \newline \cmd{repeat} \end{texcode} % which gives % \begin{list}{}{} \item \font \tempfonta = ec-lmtt8 at 5pt \tempfonta \baselineskip = 5.5pt \raggedright \count255 = -11 \loop \escapechar = \count255 [\cmdstring \documentclass]\nobreak\ % [\cmdstring \\]\nobreak\ % [\mbox{\cmdstring \ }] \ifnum \count255 < 300 \advance \count255 by 1 \repeat \par \end{list} \end{document}