7 KiB
+++ description = "Render code with a syntax highlighter" title = "Highlight" +++
The highlight
shortcode renders your code with a syntax highlighter.
{{< highlight lineNos="true" type="py" wrap="true" title="python" >}} print("Hello World!") {{< /highlight >}}
Usage
This shortcode is fully compatible with Hugo's highlight
shortcode but offers some extensions.
It is called interchangeably in the same way as Hugo's own shortcode providing positional parameter or by simply using codefences.
You are free to also call this shortcode from your own partials. In this case it resembles Hugo's highlight
function syntax if you call this shortcode as a partial using compatiblity syntax.
While the examples are using shortcodes with named parameter it is recommended to use codefences instead. This is because more and more other software supports codefences (eg. GitHub) and so your markdown becomes more portable.
{{< tabs groupid="shortcode-parameter">}} {{% tab title="codefence" %}}
```py { lineNos="true" wrap="true" title="python" }
print("Hello World!")
```
{{% /tab %}} {{% tab title="shortcode" %}}
{{</* highlight lineNos="true" type="py" wrap="true" title="python" */>}}
print("Hello World!")
{{</* /highlight */>}}
{{% /tab %}} {{% tab title="shortcode (positional)" %}}
{{</* highlight py "lineNos=true,wrap=true,title=python" */>}}
print("Hello World!")
{{</* /highlight */>}}
{{% /tab %}} {{% tab title="partial" %}}
{{ partial "shortcodes/highlight.html" (dict
"page" .
"content" "print(\"Hello World!\")"
"lineNos" "true"
"type" "py"
"wrap" "true"
"title" "python"
)}}
{{% /tab %}} {{% tab title="partial (compat)" %}}
{{ partial "shortcodes/highlight.html" (dict
"page" .
"content" "print(\"Hello World!\")"
"options" "lineNos=true,wrap=true,title=python"
"type" "py"
)}}
{{% /tab %}} {{< /tabs >}}
Parameter
Name | Position | Default | Notes |
---|---|---|---|
type | 1 | <empty> | The language of the code to highlight. Choose from one of the supported languages. Case-insensitive. |
title | <empty> | Extension. Arbitrary title for code. This displays the code like a single tab if hl_inline=false (which is Hugos default). |
|
wrap | see notes | Extension. When true the content may wrap on long lines otherwise it will be scrollable.The default value can be set in your hugo.toml and overwritten via frontmatter. See below. |
|
options | 2 | <empty> | An optional, comma-separated list of zero or more Hugo supported options as well as extension parameter from this table. |
<option> | <empty> | Any of Hugo's supported options. | |
<content> | <empty> | Your code to highlight. |
Configuration
Default values for Hugo's supported options can be set via goldmark settings in your hugo.toml
Default values for extension options can be set via params settings in your hugo.toml
or be overwritten by frontmatter for each individual page.
Global Configuration File
You can configure the color style used for code blocks in your color variants stylesheet file.
Recommended Settings
[markup]
[markup.highlight]
# line numbers in a table layout will shift if code is wrapping, so better
# use inline; besides that visually both layouts have the same look and behavior
lineNumbersInTable = false
# the shipped variants come with their own modified chroma syntax highlightning
# stylesheets which are linked in your generated HTML pages; you can use Hugo to generate
# own stylesheets to your liking and use them in your variant;
# if you want to use Hugo's internal styles instead of the shipped stylesheets:
# - remove `noClasses` or set `noClasses = true`
# - set `style` to a predefined style name
# note: with using the internal styles, the `--CODE-theme` setting in your variant
# stylesheet will be ignored and the internal style is used for all variants and
# even print
noClasses = false
# style = "tango"
Optional Settings
[params]
highlightWrap = true
Page's Frontmatter
+++
highlightWrap = true
+++
Examples
Line Numbers with Starting Offset
As mentioned above, line numbers in a table
layout will shift if code is wrapping, so better use inline
. To make things easier for you, set lineNumbersInTable = false
in your hugo.toml
and add lineNos = true
when calling the shortcode instead of the specific values table
or inline
.
{{</* highlight lineNos="true" lineNoStart="666" type="py" */>}}
# the hardest part is to start writing code; here's a kickstart; just copy and paste this; it's free; the next lines will cost you serious credits
print("Hello")
print(" ")
print("World")
print("!")
{{</* /highlight */>}}
{{< highlight lineNos="true" lineNoStart="666" type="py" >}}
the hardest part is to start writing code; here's a kickstart; just copy and paste this; it's free; the next lines will cost you serious credits
print("Hello") print(" ") print("World") print("!") {{< /highlight >}}
Codefence with Title
```py { title="python" }
# a bit shorter
print("Hello World!")
```
# a bit shorter
print("Hello World!")
With Wrap
{{</* highlight type="py" wrap="true" hl_lines="2" */>}}
# Quicksort Python One-liner
lambda L: [] if L==[] else qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + qsort([x for x in L[1:] if x>=L[0]])
# Some more stuff
{{</* /highlight */>}}
{{< highlight type="py" wrap="true" hl_lines="2" >}}
Quicksort Python One-liner
lambda L: [] if L==[] else qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + qsort([x for x in L[1:] if x>=L[0]])
Some more stuff
{{< /highlight >}}
Without Wrap
{{</* highlight type="py" wrap="false" hl_lines="2" */>}}
# Quicksort Python One-liner
lambda L: [] if L==[] else qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + qsort([x for x in L[1:] if x>=L[0]])
# Some more stuff
{{</* /highlight */>}}
{{< highlight type="py" wrap="false" hl_lines="2">}}
Quicksort Python One-liner
lambda L: [] if L==[] else qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + qsort([x for x in L[1:] if x>=L[0]])
Some more stuff
{{< /highlight >}}