[Tex/LaTex] How to create wrapper macro for lstinline

listingsmacrosverbatim

Using \lstinline I can include inline code snippets in a paragraph. I would like to provide a macro that selects formatting, etc, for lstinline so I can just do, say, \codeinline{snippet}.

I had implemented this as a short inline, like this:

\lstdefinestyle{inlinecode}{basicstyle=\ttfamily\footnotesize\bfseries}
\lstMakeShortInline[style=inlinecode]~

So I could then write ~snippet~, and that works fine. However, If I need to use ~ in the snippet it doesn't work. The same applies if I change the short inline character to something else. So, I thought of just having a well defined macro, something like:

\newcommand\codeinline[1]{\lstinline[style=inlinecode]{#1}}

Which also works, except when certain characters are in the snippet. For example, this

\codeinline{example-command ~/myfile}

does not work because of the ~. I found a similar question (which inspired the above \codeinline macro) but I don't want to have to escape characters in the snippet, I just want it treated verbatim in the same way as lstinline does. I hope that it is possible because lstinline does it.

It is possible to write a wrapper around lstinline that works as well as lstinline works ?

Best Answer

You need to avoid to read in the argument with the wrapper macro as this would fix the category codes of the argument and \lstinline cannot do its magic anymore. So, here you go:

\newcommand\codeinline{\lstinline[style=inlinecode]}

This way you can also use the syntax with delimiters:

\codeinline+&$%+

This works since a macro that has no argument simply is replaced by its definition. So

\codeinline+&$%+

becomes

\lstinline[style=inlinecode]+&$%+

which works as intended.