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

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
itzmidinesh
Hi all, I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
csmr
Hi all, I’m new here and would like to hear peoples views on my Elixir/Phoenix based game-engine! :smiley: Mutonex gamedesign was finish...
New
Stef-Verniers
Hello I’ve been coding in Elixir for almost two years now because of my current job where we implemented Elixir in our application. But ...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews