# Insert code into a latex doc. without leading tabs

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},
stringstyle=\color{mauve},
breakatwhitespace=true
tabsize=3
}

• You may want to look here for automatic tab skipping. – Stefan Mar 14 '12 at 22:58

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]

• Will this gobble 3 tabs and the next 5 characters, or will it guarantee to gobble 8 columns? – dreamlax Aug 4 '10 at 21:56
• @dreamlax: At least in my LaTeX tabs convert to 8 spaces. So it will gobble 2 tabs. – Cloudanger Aug 4 '10 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. – sixtyfootersdude Aug 5 '10 at 17:49
• @sixty: LaTeXCalc latexcalc.sourceforge.net can do computations. – Cloudanger Aug 5 '10 at 18:51

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/

• 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. – sixtyfootersdude Aug 5 '10 at 12:30

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
}

• verbatim is lacking a lot of features that listings have, though, such as syntax highlighting. – LokiRagnarok Sep 10 '19 at 13:00