11

When I write latex I usually indent my sections like this (it allows easier folding in vim, is like reading code, etc).

section{section}

    bla bla bla bla bla

    subsection{a}

        bla bla bla bla bla

    subsection{b}

        bla bla bla bla bla

The problem is when I insert code (see below) into my document if I indent the all of the code 3 tabs it will be be indented 3 tabs in the document. I want to preserve the relative indenting but I don't want that extra three tabs of indentation.

For example this latex:

    subsection{a}

        bla bla bla bla bla
    \begin{lstlisting}
    public static void main(String [] args){
        bla bla
    }
    \end{lstlisting}

Produces:

a

bla bla bla bla bla

            /* code is indented 3 tabs */
            public static void main(String [] args){
                bla bla
            }

I would like it to produce:

a

bla bla bla bla bla

public static void main(String [] args){
    bla bla
}

This is the code that is responsible for the code formatting (thanks Cloudanger).

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breakatwhitespace=true
  tabsize=3
}
1
  • You may want to look here for automatic tab skipping.
    – Stefan
    Mar 14, 2012 at 22:58

3 Answers 3

9

Not a very good solution (automatical would be ideal), but this works:

Use gobble-setting to remove characters from start.

Example

Remove two tabs (= 8 spaces) from start:

\begin{lstlisting}[gobble=8]
4
  • Will this gobble 3 tabs and the next 5 characters, or will it guarantee to gobble 8 columns?
    – dreamlax
    Aug 4, 2010 at 21:56
  • @dreamlax: At least in my LaTeX tabs convert to 8 spaces. So it will gobble 2 tabs.
    – Cloudanger
    Aug 4, 2010 at 22:01
  • Wow! That is awesome! Thanks so much. Is there anyway that I can do something like \begin{lstlisting}[gobble=a*b] where a could be the number of spaces/tab (which I assume could change, probably it is set to an env variable) and b is the number of tabs to enter. This would a little bit cleaner.... If I don't get an "automatic" answer in the next few days I will marks yours as accepted. Aug 5, 2010 at 17:49
  • @sixty: LaTeXCalc latexcalc.sourceforge.net can do computations.
    – Cloudanger
    Aug 5, 2010 at 18:51
1

What do you mean by "it allows easier folding in Vim"? Are you writing LaTeX and using indents to get your folding in Vim? That seems like less than optimal approach.

A better approach would be to use the Vim LaTeX-Suite plugin, which gives you automatic folding of sections regardless of how they're indented. Plus it has a lot of other benefits. http://vim-latex.sourceforge.net/

1
  • Actually yeah I am using that (so it takes care of folding) but when I edit it on another computer (without latex-suite) it is nice to still have folding. Reading it is also easier because it is more codey. Aug 5, 2010 at 12:30
0

You can use verbatim instead of lstlisting. verbatim ignores tabs but does not ignore spaces. If you use verbatim, make the indentation you would like to be ignored with tabs and the indentation you would like to keep with spaces.

Here is an example. For better readability, tabs in this example are represented by ____ and spaces are represented by ·.

subsection{a}
____bla bla bla bla bla
____\begin{verbatim}
____public static void main(String [] args){
____····bla bla
____}
____\end{verbatim}

Result:

a

bla bla bla bla bla

public static void main(String [] args){
    bla bla
}
1
  • verbatim is lacking a lot of features that listings have, though, such as syntax highlighting. Sep 10, 2019 at 13:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .