Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

For example, I have a command which has a lot of options:

\documentclass[option1,option2,option3,option4,option5,option6,option7]{article}

I want to split it to several lines so I could read the code better:

\documentclass[option1,
               option2,
               option3,
               option4,
               option5,
               option6,
               option7]{article}

What is the proper way to do it?

share|improve this question

2 Answers 2

up vote 14 down vote accepted

End each line with a %. This will gobble the line-feed and all whitespace at the beginning of next line. Thus you'd get

\documentclass[option1,%
               option2,%
               option3,%
               option4,%
               option5,%
               option6,%
               option7]{article}

to do what you want it to.

Edited To Add: As Geoffrey points out in a comment to this answer, in this context, this solution is overkill. Using % at the end of a line will always gobble up the newline and the leading whitespace — however, this is (as Geoffrey points out) irrelevant unless in a context where initial whitespace is influential. Thus, in a \documentclass, it can be omitted and Kit's original code used; while in a case like

\begin{tikzpicture}
  \foreach \p/\x/\y in {%
    0/1/2,%
    2/3/4,%
    3/4/5,%
    4/5/6,%
  } {
    \node [coordinate] (p\p) at (\x,\y) {};
  }
% Do stuff with the defined coordinates
\end{tikzpicture}

it becomes relevant, as otherwise the whitespace would be included with the definition of \p, and destroy the crafted coordinate names.

Plenty similar examples outside of TikZ exist — this was the example I could think of the quickest where it becomes relevant.

share|improve this answer
10  
Mikael, technically you are correct. However, your solution is overkill. Don't bother with the %'s in places where TeX\LaTeX is not in (let's call it) typesetting mode, that is, where not tokenising the stream of characters for eventual output processing. Unless you have some very weird list processing command, most comma separated lists expansion rules treat newlines as spaces. So, the %'s are quite unnecessary in the context of your particular example. Most coders would omit then since they're quite a pain to read and write. –  Geoffrey Jones Sep 12 '10 at 15:11
1  
Right, Geoffrey. Thank you! I'm not quite proficient enough to know exactly when newlines are relevant and when they are not. –  Mikael Vejdemo-Johansson Sep 12 '10 at 18:47
1  
TeX (almost) always ignores spaces at the beginning of the line. I wrote a bit about TeX's three states (N, M, and S), which determine how TeX treats a space, here. –  TH. Sep 12 '10 at 23:28
    
@TH.: yes, it does almost always ignore the spaces after a line break, but typically it does notice the line break; e.g. if in horizontal mode and in state M, it will generally insert the same thing it would have on encountering a space, will it not? –  SamB Feb 22 '11 at 0:50
    
@SamB: Yes. TeX inserts an \endlinechar character at the end of every line (after stripping of trailing spaces). By default, this has category code 5. In state M, a catcode 5 token ends the line and inserts a space token (char code 32, catcode 10). In state N, it inserts a \par token and in state S, it does nothing. –  TH. Feb 22 '11 at 4:06

If you are too lazy to type % at the end of each input line (or you think it looks ugly to do so), then a sneaky trick is to redefine \endlinechar. Another trick is to set the catcode of ^^M to 9 (ignore). In these cases if you do want a space at the end of the line you have to use "%" (space percent) at the line ending.

{%
a%
  b%
     c
d
}

is equivalent to

{\endlinechar=-1
a
  b
    c %
d
}

is equivalent to

{\catcode`\^^M=9
a
  b
    c %
d
}

is equivalent to

{abc d}
share|improve this answer
    
How does that zap the initial spaces on the lines with b and c on them? –  SamB Feb 22 '11 at 0:46

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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