# How can I get all TeX / LaTeX symbols?

I am currently writing the practical part of my bachelors thesis which will be about on-line recognition of handwritten mathematical symbols (and eventually also formuae).

One problem I currently have with this is that I need to have the symbols in my database. I basically need

• The latex code for the symbol (e.g. A, $\alpha$, $\rightarrow$, $\mathbb{R}$, ...)
• The package name if I need one (e.g. \usepackage{amsmath})
• SVG

I can create the SVG with the other two pieces of information (although the SVGs I can create are far from optimal), but I currently don't see a better way than manually entering those symbols. This seems like a tremendous waste of time, hearing from the developer of detexify that he has about 2000 symbols (but he can't give me the database - I don't know why).

So: How can I get a list of all symbols LaTeX / TeX has?

(By the way, the site is http://write-math.com - but it still is a very early alpha release and I might truncate the database in the next few days, so please don't waste your time and generate data. The symbol recognition part doesn't exist at the moment.)

-
Symbol lists available in plaintext, LaTeX source, or PDF output: ctan.org/tex-archive/info/symbols/comprehensive –  Paul Gessler May 8 '14 at 18:04
possible duplicate of How to look up a symbol or identify a math alphabet? –  Henri Menke May 8 '14 at 18:08
@HenriMenke I don't want to look up one symbol. I want to have a processable list of all symbols. My question is not a duplicate of the question you've linked. –  moose May 8 '14 at 18:11
@moose There's no 'fixed' list, and probably the Detexify database contains what you want. I'd be minded to ask the developer of that tool. –  Joseph Wright May 8 '14 at 18:43
@moose along with the ruby file, you can find his database at github.com/kirel/detexify/blob/master/lib/latex/symbols.yaml This contains the packages required as well as which mode is required. –  Paul Gessler May 8 '14 at 18:49

As mentioned in the comments, the source for detexify is available on GitHub at https://github.com/kirel/detexify.

The symbols database is provided at lib/latex/symbols.yaml in a YAML format (sample below) which is easily extensible and satisfies your requirements for information about the required package(s) and mode (text or math).

# Table 212: wasysym Biological Symbols
- package: wasysym
bothmodes:
- \female
- \male
- package: skull
mathmode:
- \skull
# Table 254: wasysym General Symbols
- package: wasysym
textmode:
- \LEFTarrow
# <...>
- \recorder
bothmodes:
- \checked #
# <...>
- \invdiameter #


SVG output can be created by adapting a rake task provided in lib/rake/symbol_task.rb. I present my initial adaptation of this code below. Disclaimer: I am a newbie to Ruby, and there are likely better ways to do this since I'm stripping away most of Daniel's code here. Take this as a starting point rather than the standard. :-)

require 'rake/tasklib'
require 'erb'
require 'latex/symbol'

\\documentclass[10pt]{article}
\\usepackage[utf8]{inputenc}

<%= @packages %>

\\pagestyle{empty}
\\begin{document}

<%= @command %>

\\end{document}
LATEX

TMP = 'tmp'
OUT = 'images/latex'

attr_accessor :name, :tmp, :out

# initialize sets the name and calls a block to get
#   the rest of the options
def initialize(name = :symbols)
@name = name
yield self if block_given?
define
end

# define creates the new task(s)
def define
#desc "prepare necessary directories"
directory TMP
directory OUT
#end

end

desc "create svg images from all symbols"
end

file "#{File.join(OUT, symbol.filename)}.svg" => [OUT, "#{File.join(TMP, symbol.filename)}.dvi"] do |t|
# Now convert to image
puts "Creating image... #{t.name}"
sh %|dvisvgm -n #{File.join(TMP, symbol.filename)}.dvi #{t.name}| do |ok, res|
if ! ok
puts "Major Failure creating image! (status = #{res.exitstatus})"
end
end

end
"#{File.join(OUT, symbol.filename)}.svg" # need the names
end

file "#{File.join(TMP, symbol.filename)}.dvi" => [TMP, "#{File.join(TMP, symbol.filename)}.tex"] do
puts "Generating dvi for #{symbol}..."
sh %|latex -interaction=batchmode -output-directory=#{TMP} #{File.join(TMP, symbol.filename)}.tex| do |ok, res|
if ! ok
puts "Major Failure creating dvi! (status = #{res.exitstatus})"
end
end
end
end

file "#{File.join(TMP, symbol.filename)}.tex" => TMP do |t|
open(t.name, 'w+') do |texfile|
# setup variables
@packages = ''
@packages << "\\usepackage{#{symbol[:package]}}\n" if symbol[:package]
@packages << "\\usepackage[#{symbol[:fontenc]}]{fontenc}\n" if symbol[:fontenc]
@command = symbol.mathmode ? "$#{symbol.command}$" : symbol.command
# write symbol to tempfile
puts "Generating latex for #{symbol}..."
texfile.puts TEMPLATE.result(binding)
end
end
end

end


I made these modifications on a clone of the detexify repository, but the only files required are lib/rake/symbol_task.rb, lib/latex/symbol.rb, and lib/latex/symbols.yaml.

To build all SVG outputs, execute rake gen_svg at a Ruby command prompt. dvisvgm is required; alternatively, the Ruby code could be modified to use pdflatex with pdf2svg (untested) or Inkscape (on the command line) to perform the conversion to SVG.

-