TransWikia.com

How to format an inline source code

TeX - LaTeX Asked on December 31, 2021

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?

4 Answers

A good way to solve this is with the tcolorbox package, and then add a custom tcbox to your preamble with the style declarations of choice:

newtcbox{inlinecode}{on line, boxrule=0pt, boxsep=0pt, top=2pt, left=2pt, bottom=2pt, right=2pt, colback=gray!15, colframe=white, fontupper={ttfamily footnotesize}}

This will result in a similar look to what is found on this site and others for inline code. As an example:

documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tcolorbox}
newtcbox{inlinecode}{on line, boxrule=0pt, boxsep=0pt, top=2pt, left=2pt, bottom=2pt, right=2pt, colback=gray!15, colframe=white, fontupper={ttfamily footnotesize}}
begin{document}
This is a sample of some inline code: inlinecode{int x = 0;}.
end{document}

The output of this code looks like this:

result of using tcolorbox to make inline code snippets

Answered by Jonathan E. Landrum on December 31, 2021

You can create your inlinecode command which adapts to various languages.

Here is some piece of code I've been using and which was very helpful to me:

usepackage{listings}
usepackage{color}
definecolor{lightgray}{gray}{0.9}

lstset{
    showstringspaces=false,
    basicstyle=ttfamily,
    keywordstyle=color{blue},
    commentstyle=color[grey]{0.6},
    stringstyle=color[RGB]{255,150,75}
}

newcommand{inlinecode}[2]{colorbox{lightgray}{lstinline[language=#1]$#2$}}

Then I use the command this way:

inlinecode{Java}{import java.utils.LinkedList;}
inlinecode{Java}{String s = "Hello, World!";}

and what I get is this:

latex inline code

Unfortunately I could not get it to compile with comments.

EDIT: You can change the font colors in lstset and change/remove the background by modifying or removing colorbox

Answered by Salvioner on December 31, 2021

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]{%
  begingroupemergencystretch=#1relax
  @@paraftergroupparendgroup}
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]{%
  begingroupemergencystretch=#1relax
  @@paraftergroupparendgroup}
makeatother

begin{document}
lipsum*[2]

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

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

Answered by egreg on December 31, 2021

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=ttfamilycolor{white}]|<List>|}


Answered by user2478 on December 31, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP