8

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 ?

  • 1
    Try not to read in the argument: \newcommand\codeinline{\lstinline[style=inlinecode]} – cgnieder Mar 1 '13 at 13:14
  • @cgneider yes, that works. thank you. I'll accept that if you add it as an answer. I'm still learning the nuances of tex. – starfry Mar 1 '13 at 13:56
11

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.

  • I would like something similar, but which would enclose the code snippet in quotes. There's no solution, is there? – akim Nov 20 '15 at 8:55
  • @akim With the xparse package you can try \NewDocumentCommand\mycode{v}{``\lstinline{#1}''} – I don't know how robust that is, though – cgnieder Nov 20 '15 at 10:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.