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?
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:
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:
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP