Code
The main text column offers space for 80 characters of code in one line. When we need more to fit in one line, we can let it expand into the marginal column(s).
Short snippets of code are usually placed in line with the normal text. Longer pieces of code or entire files should be marked as (fenced) code blocks. Hugo can style and colorize fenced code blocks with the built-in Chroma highlighter.
The theme offers additional layout styles with the attributes {.expand}
and the general positioning attributes.
Syntax
Inline Code
A code snippet is surrounded by single backticks like `code`
.
Code Block
In principle there are two ways to mark a block as code:
- Fenced
- When a block is surrounded by three back-ticks
```
in the line above and beyond it’s a fenced code block. - Indented
- A block of text indented by 4 spaces or a tab is also treated as a code block.
The fenced version of the CommonMark syntax is definitely preferable for a number of reasons:
The following special styling options are only available for fenced blocks:
Code highlighting
Line numbers
Line markers
Line anchors
We can let fenced code blocks automatically expand into the marginal column(s) by adding the attribute
{.expand}
and can avoid bothering our readers with horizontal scrollbars more often than absolutely necessary.There is an overlap with the syntax for the extensions footnote and definition-list. When we add subsequent paragraphs there, we need to indent them also by 4 spaces or a tab. If we try to place an indented code block after a footnote reference or a definition detail, Hugo will treat it as this kind of continuation indent and not as a separate code block.
Highlighting
Chroma can highlight many languages, when we add their usual file suffixes. The Hugo docs include the full list of available languages.
Additional styling for fenced code blocks
The attributes follow the first fence of the code block on the same line after a space, like ```md {linenos=true, linenostart=6}
.
Note the comma between the special highlighting attributes! Normal attributes are only separated by spaces.
The special attributes suitable for this theme are:
linenos
- Enables or disables line numbers. They are disabled by default for this project — enable them with
linenos=true
. hl_lines
- Especially highlights some code lines. The lines must be given as a set of numbers or ranges enclosed in square brackets. Every range has to be surrounded additionally by quotes:
hl_lines=[2,"5-7"]
. linenostart
- Lets the line numbers begin with a given number, like
linenostart=23
lineanchors
- Adds a prefix to the anchors on the line numbers. With
lineanchors=prefix
for example the anchors are namedprefix-1
,prefix-2
, …
Layout
Inline
The HTML tag to mark the beginning of the code is <code>
. And to mark the end we use the corresponding closing tag </code>
. Markdown text surrounded by backticks like `text`
gets enclosed by these tags. And that’s all about inline code.
Block (default)
The _HTML_ tag at the **beginning** of the code is `<code>`.
And to mark the **end** we use the corresponding closing tag `</code>`.
Block with line numbers and highlighting
Long blocks
We can let long lines of code expand into the margin with the .expand
class attribute:
When all code lines are no longer than 40 characters, we can place them inside or beside the text with position class attributes:
{
"firstName": "John",
"lastName": "Smith",
"age": 35,
"profession": "Last Man Standing"
}
Show mangled quartz flip vibe exactly. Heavy boxes perform quick waltzes and jigs. The job of waxing linoleum frequently peeves chintzy kids.
├── assets
├── config
├── package.json
├── public
├── resources
└── themes
Six big devils from Japan quickly forgot how to waltz. Waltz, nymph, for quick jigs vex Bud! Vexed nymphs go for quick waltz job. Sixty zips were quickly picked from the woven jute bag. Fickle jinx bog dwarves spy math quiz.
The last example includes the output of the tree
command in a project directory. Because the folders are all lowercase we can further reduce the line height with the attribute {.lh15}
→ the tree has no gaps.
Indented
The _HTML_ tag at the **beginning** of code is `<code>`.
And to mark the **end** we use the corresponding closing tag `</code>`.