Skip to content

shikijs/shiki-latex

Repository files navigation

Shiki LaTeX

A Shiki renderer for LaTeX. Compatible with minted, replacing Pygments.

Source Package Continuous Integration

Comparison

Shiki Pygments
Shiki Pygments

Installation

Install Node.js and run:

$ npm install shiki-latex

Using with minted

\usepackage{minted}
\renewcommand{\MintedPygmentize}{node_modules/.bin/shiki-minted}

Themes

Choose a theme with the \usemintedstyle{} command.

You may refer to a built-in Shiki theme by name, for example:

\usemintedstyle{nord}

You may refer to a theme file that you download and put next to your LaTeX source (don’t put it under a folder because minted doesn’t support it); for example, to use the SynthWave '84 theme, download synthwave-color-theme.json and add the following to your LaTeX source:

\usemintedstyle{synthwave-color-theme.json}

Note: Some themes may not look as good on a PDF as they do on a webpage. It’s part of the game: LaTeX renders things differently from a browser. It’s a hit-and-miss situation.

Using Programmatically

import { getHighlighter } from "shiki";
import { renderToLaTeX } from "shiki-latex";

(async () => {
  const highlighter = await getHighlighter({ theme: "light_plus" });
  const lines = highlighter.codeToThemedTokens(
    `const name = "Leandro Facchinetti";`,
    "ts"
  );
  console.log(renderToLaTeX(lines));
})();

The package comes with type definitions for TypeScript.

Options

The renderToLaTeX() function accepts a second argument with options that control the rendering, for example:

renderToLaTeX(lines, { defaultColor: "#FF0000" });

The available options are the following:

defaultColor: string (default #000000): The color to use when the theme doesn’t specify a color for a part of the highlighted program.

mathescape: boolean (default false): Enable LaTeX math mode escape ($___$) in comments.