sashaafm

sashaafm

Hi guys! Has anyone found (or has a way) to insert good Elixir code listing and snippets in LaTeX? Something with automatic color highlights. I’m using the listings package and while it’s got support for a ton of languages (including Erlang) it does not have for Elixir :frowning2:

I guess I could always insert them as images although I don’t find that to be very correct for a formal document.

Showing Posts 1 to 10

Qqwy

Qqwy

TypeCheck Core Team

I do not believe there exists a library for LaTeX that does Elixir-highlighting right now. However, as Elixir’s syntax is actually quite regular (i.e. there are not a lot of edge-cases), creating such a library should not be extremely difficult (but, you know, still difficult). There do exist syntax highlighting packages for Sublime, Atom, Emacs and the likes, so maybe some of their logic could be ported to a LaTeX library.

sashaafm

sashaafm OP

Yeah I guessed there wouldn’t be a package for it. Although I’ve been experimenting and I think the Ruby highlight should be okayish!

NobbZ

NobbZ

If you do not fear \write18 and have a recent version of pygments installed, you can use minted package.

vidalraphael

vidalraphael

I’m actually writing a paper on concurrency and I’m using tons of Elixir code. :smile:

I’m using the listings package and created a definition for the Elixir lang.

Some things like atoms and module attributes don’t work quite like I would prefer, but it is better than creating images and pasting then all the time :fearful:

Here’s the definition:

\lstdefinelanguage{elixir}{
	morekeywords={case,catch,def,do,else,false,%
		use,alias,receive,timeout,defmacro,defp,%
		for,if,import,defmodule,defprotocol,%
		nil,defmacrop,defoverridable,defimpl,%
		super,fn,raise,true,try,end,with,%
		unless},
	otherkeywords={<-,->},
	sensitive=true,
	morecomment=[l]{\#},
	morecomment=[n]{/*}{*/},
	morestring=[b]",
	morestring=[b]',
	morestring=[b]"""
}

And here’s the rendered result:

m1dnight

m1dnight

I made some minor changes to this, and ended up with highlighted keywords. The only downside is that a keyword needs to be followed by a space to make the parser happy.

\lstdefinelanguage{elixir}{
    morekeywords={case,catch,def,do,else,false,%
        use,alias,receive,timeout,defmacro,defp,%
        for,if,import,defmodule,defprotocol,%
        nil,defmacrop,defoverridable,defimpl,%
        super,fn,raise,true,try,end,with,%
        unless},
    otherkeywords={<-,->, |>, \%\{, \}, \{, \, (, )},
    sensitive=true,
    morecomment=[l]{\#},
    morecomment=[n]{/*}{*/},
    morecomment=[s][\color{purple}]{:}{\ },
    morestring=[s][\color{orange}]"",
    commentstyle=\color{commentgreen},
    keywordstyle=\color{eminence},
    stringstyle=\color{red},
	showstringspaces=false,
}

I have put an entire minimal example online here: Elixir Listings Latex · GitHub

The rendered output looks as follows:

OvermindDL1

OvermindDL1

You could always write a latex macro to call out to @tmbb’s syntax highlighter or so too, I think you could plug in a new backend to generate latex out pretty easily?

tmbb

tmbb

Sure, and that would allow you to be much more precise in complex bits of syntax, such as sigils and string interpolation. It woukd require packaging Makeup’s highlighter into an escript that highlights the input given by stdin. That’s a little beyond my elixir skills right now (I don’t use Elixir for scripting), but it can be done.

Sure. For someone who knows tex and latex well it can be done in an afternoon. The token format returned by the makeup lexers is stable (although not documented outside the source code, because I can’t think of a way to document them better) and is considered part of the public API, so writing a LaTeX formatter would be easy (again, assuming you’re a TeX pro, which i am not).

Your best bet, if you can read and write Python, is to translate the formatter from Pygments xD (most of Makeup is a blatant rippoff of Pygments anyway)

m1dnight

m1dnight

If you really want proper highlighting, there is always the minted[1] package, which works great. However, I had a hard constraint on lstlistings, so I could not use it.

I think that if we were to improve the highlighting, we should improve no pygments, the backend that is used by minted in latex.

[1] Code Highlighting with minted - Overleaf, Online LaTeX Editor

tmbb

tmbb

Indeed, but Makeup is a much better highlighter for elixir. You can replicate Makeup’s pexer in Pygments, but it’s hard because of Pygment’s “weird” architecture.

s417-lama

s417-lama

There is another option to do it: a vim plugin to generate listings with colorscheme of vim. It does not depend on syntax highlighting of listings and we can utilize syntax highlighting in vim for LaTeX:) The output looks quite beautiful.

https://github.com/s417-lama/carbonpaper.vim

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews