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.

I have a document where I quiet often refer to source code element, such as class names, I wanted to format these strings differently, but at the beginning I didn't want to fiddle with various options I had, rather I defined my custom command as follows:

\providecommand{\inlinecode}[1]{\texttt{#1}}

Now my question is, what do you think is the best way to define \inlinecode? Note: I often use text with unescaped <, >, e.g., List<T>.

The \texttt looks fine to me, and works with <, >, but sometimes the words overflow the line. Is there any way to tell latex not to overflow the line, but rather "underflow" or insert more spaces between words, which seems to me as (maybe still ugly but) more acceptable than overflow? And is it possible to achieve it by only changing definition of my command, so I won't have to change the whole source?

share|improve this question
2  
BTW: If you define a command like the one above you can also simply write \newcommand{\inlinecode}{\texttt} without passing the argument around. Even more efficient would be \let\inlinecode\texttt. –  Martin Scharrer May 25 '11 at 9:43

2 Answers 2

use package listings instead. Then you can use \lstinline|<List>|. You can define the setting with \lstset{...}. A backgroundcolor is possible with a \colorbox:

\colorbox{blue}{\lstinline[basicstyle=\ttfamily\color{white}]|<List>|}

share|improve this answer
2  
\lstinline also accepts the settings as an optional argument, but for global settings \lstset{...} in the preamble is of course better. –  Martin Scharrer May 25 '11 at 9:41
    
Thank you for you answer. With \lstinline the text seems as normal, it is not different from the other text, which is not in \lstinline. Is it correct behaviour? I am looking for something that will change the font, so the inline code will look different than the other text. –  Steves May 25 '11 at 22:05
    
backgroundcolor is not available for \lstinline. –  cyanide-based food Jul 31 '12 at 9:18
1  
@GarbageCollector: you can use a color box but, of course, with no linebreak –  Herbert Jan 28 '13 at 18:59

I wouldn't use \providecommand, to begin with: if you load a package that happens to define \inlinecode, chaos might happen.

The definition is good, although I would say

\newcommand{\inlinecode}{\texttt}

that avoids reading the argument twice, but this is a minor issue. Using a self-defined command is the right way, as you can freely redefine it in (almost) any way you like.

The main problem is, of course, that long words in typewriter type are a potential source for overfull lines. There's no automatic cure, apart from enclosing the paragraph in a sloppypar environment that sets the tolerance (a measure of how much you are accepting large spaces between words) to a very high value. You can also use the \sloppy declaration that sets those parameters "forever" (but respecting groups, of course).

What to do depends on the nature of the document: an informal report might be set with \sloppy, a formal book not.

My usual suggestion is to worry about bad line breaks only when the text is in its almost final form. Only at that time you can check the bad breaks one by one: it's often easy to find a way to rephrase the paragraph and avoid the bad break. When this fails, you can put \emergencypar at the end of the paragraph, where you have defined

\makeatletter
\newcommand{\emergencypar}[1][3em]{%
  \begingroup\emergencystretch=#1\relax
  \@@par\aftergroup\par\endgroup}
\makeatother

and try. You can also change the parameter by saying \emergencypar[4em] or other values. This will enlarge the interword spaces, but in a more uniform way than with \sloppy.

The command sets the \emergencystretch parameter inside a group, in which the primitive command \par (that LaTeX calls \@@par) is executed. We need to execute also \par with its present meaning, but outside the group, since this command is used by LaTeX for some internal workings.

Example (\lipsum* doesn't add \par at the end)

\documentclass{article}
\usepackage{lipsum}
\textwidth=5cm
\makeatletter
\newcommand{\emergencypar}[1][3em]{%
  \begingroup\emergencystretch=#1\relax
  \@@par\aftergroup\par\endgroup}
\makeatother

\begin{document}
\lipsum*[2]

\lipsum*[2]\emergencypar[2em]
\end{document}

Some Underfull \hbox messages are unavoidable, one might insert \hbadness=4000\relax after setting the \emergencystretch in the definition above to limit their appearance only to very bad lines.

share|improve this answer
    
Thank you for your detailed answer. I will try it. –  Steves May 25 '11 at 22:07

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.