17

I tend to use the minted package for including code samples within my documents, which produces very nice output. However, because Pygments always produces a verbatim environment there's no way to inline the code if I need to discuss particular features of it. What is the best way to typeset inline code to go alongside code produced by minted?

Using the listings package just for \lstinline is one option I've considered, but it seems a bit odd to use both minted and listings together. I've used listings in the past, but (in my opinion and with the samples I've tried) I don't think the output is as nice as that produced with minted. Are there any other means of producing inline code that I'm unaware of?

Philipp
  • 17,641
Edd
  • 1,122
  • The output of listings can be configured quite a bit, see for example this question: http://tex.stackexchange.com/questions/8230/what-configuration-do-you-propose-for-listings-sty-to-make-the-output-look-comf – Jan Hlavacek Feb 11 '11 at 18:40

4 Answers4

7

AFIK this is an area, where you cannot use Pygments.

The simplest way to achieve it from a "typing" point of view is to use a "short verbatim".

\documentclass{article}
\usepackage{fancyvrb}
\DefineShortVerb{\|}
\begin{document}
This is some inline code |for i=1;i<20;i++| and more \ldots
\end{document}

The package fancyvrb offers a number of customizations as well.

yannisl
  • 117,160
  • This loses me all of the syntax analysis offered by a package such as listings or minted. See here for a comparison between this suggestion and the accepted minted solution. – Edd Feb 13 '11 at 14:08
5

You can do it with minted if you are willing to patch it:

\documentclass{minimal}
\usepackage{ifplatform}
\ifwindows\else
\newcommand*{\TestAppExists}[1]{% there is no `which -s` on Linux
  \immediate\write18{which -- '#1' > /dev/null && touch -- '\jobname.aex'}%
  \IfFileExists{\jobname.aex}{%
    \AppExiststrue
    \DeleteFile{\jobname.aex}%
  }{%
    \AppExistsfalse
  }
}
\fi
\usepackage{minted}
\makeatletter
% avoid space tokens since we're in horizontal mode
\renewcommand\mint[3][]{%
  \DefineShortVerb{#3}%
  \minted@resetoptions
  \setkeys{minted@opt}{#1}%
  \SaveVerb[aftersave={%
    \UndefineShortVerb{#3}%
    \minted@savecode{\FV@SV@minted@verb}%
    \minted@pygmentize{#2}%
    \DeleteFile{\jobname.pyg}}]{minted@verb}#3}
\renewcommand\minted@savecode[1]{%
  \immediate\openout\minted@code\jobname.pyg\relax
  \immediate\write\minted@code{#1}%
  \immediate\closeout\minted@code}
\renewcommand\minted@pygmentize[2][\jobname.pyg]{%
  \def\minted@cmd{pygmentize -l #2 -f latex -F tokenmerge
    \minted@opt{gobble} \minted@opt{texcl} \minted@opt{mathescape}
    \minted@opt{linenos} -P "verboptions=\minted@opt{extra}"
    -o \jobname.out.pyg #1}%
  \immediate\write18{\minted@cmd}%
  \ifthenelse{\equal{\minted@opt@bgcolor}{}}%
   {}%
   {\begin{minted@colorbg}{\minted@opt@bgcolor}}%
  \input{\jobname.out.pyg}%
  \ifthenelse{\equal{\minted@opt@bgcolor}{}}%
   {}%
   {\end{minted@colorbg}}%
  \DeleteFile{\jobname.out.pyg}}
\makeatother
\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}
\begin{document}
This is some inline code \mint{c++}|for i=1;i<20;i++| and more \ldots
\end{document}
Philipp
  • 17,641
3

Just for reference, see also issue 15 on the minted project page, and in particular a temporary fix that I posted there (but which probably does much the same as Philipp’s hack anyway).

In summary, this is on the “to do” list but not yet officially supported since I’m currently busy and don’t have time to work on minted.

Konrad Rudolph
  • 39,394
  • 22
  • 107
  • 160
0

The \mintinline feature allows you to write inlined code with the minted package.