Wie kann ich alle TeX/LaTeX-Symbole erhalten?

Wie kann ich alle TeX/LaTeX-Symbole erhalten?

Ich schreibe derzeit den praktischen Teil meiner Bachelorarbeit, in dem es um die Online-Erkennung handgeschriebener mathematischer Symbole (und eventuell auch Formeln) gehen wird.

Ein Problem, das ich derzeit damit habe, ist, dass ich die Symbole in meiner Datenbank haben muss. Ich brauche im Grunde

  • Der Latex-Code für das Symbol (z. B. A, $\alpha$, $\rightarrow$, $\mathbb{R}$, …)
  • Der Paketname, falls ich einen brauche (zB \usepackage{amsmath})
  • SVG

Ich kann das SVG mit den anderen beiden Informationen erstellen (obwohl die SVGs, die ich erstellen kann, alles andere als optimal sind), aber ich sehe derzeit keinen besseren Weg, als diese Symbole manuell einzugeben. Dies scheint eine enorme Zeitverschwendung zu sein, wenn man vom Entwickler vonenttextendass er über etwa 2000 Symbole verfügt (er kann mir die Datenbank aber nicht geben – ich weiß nicht, warum).

Also:Wie kann ich eine Liste aller Symbole in LaTeX/TeX erhalten?

(Die Seite ist übrigenshttp://write-math.com- aber es ist noch eine sehr frühe Alpha-Version und ich werde die Datenbank in den nächsten Tagen möglicherweise kürzen, also verschwenden Sie bitte nicht Ihre Zeit und generieren Sie Daten. Der Teil zur Symbolerkennung existiert im Moment noch nicht.)

Antwort1

Wie in den Kommentaren erwähnt, die Quelle fürenttextenist auf GitHub verfügbar unterhttps://github.com/kirel/detexify.

Die Symboldatenbank finden Sie unterlib/latex/symbols.yamlin einem YAML-Format (Beispiel unten), das leicht erweiterbar ist und Ihren Anforderungen an Informationen zu den erforderlichen Paketen und dem Modus (Text oder Mathematik) entspricht.

# 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-Ausgaben können durch Anpassen einer rakeAufgabe erstellt werden, die inlib/rake/symbol_task.rb. Unten stelle ich meine erste Anpassung dieses Codes vor.Haftungsausschluss:Ich bin ein Ruby-Neuling und es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun, da ich hier den größten Teil von Daniels Code entferne. Betrachten Sie dies als Ausgangspunkt und nicht als Standard.:-)

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

class SymbolTask < Rake::TaskLib

  TEMPLATE = ERB.new <<-LATEX #open('template.tex.erb').read
    \\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"
    #task :prepare do
      directory TMP
      directory OUT
    #end

    all_image_tasks = Latex::Symbol::List.map do |symbol|
      define_single_tex_task symbol
      define_single_dvi_task symbol      
      define_single_image_task symbol
    end

    desc "create svg images from all symbols"
    task :gen_svg => all_image_tasks
  end

  def define_single_image_task symbol
    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

  def define_single_dvi_task symbol
    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

  def define_single_tex_task symbol
    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

Ich habe diese Änderungen an einem Klon des Detexify-Repositorys vorgenommen, aber die einzigen erforderlichen Dateien sindlib/rake/symbol_task.rb,lib/latex/symbol.rb, Undlib/latex/symbols.yaml.

Um alle SVG-Ausgaben zu erstellen, führen Sie sie rake gen_svgin einer Ruby-Eingabeaufforderung aus.dvisvgmerforderlich; alternativ kann der Ruby-Code so geändert werden, dass er pdflatexmitpdf2svg(ungetestet) oder Inkscape (auf der Befehlszeile), um die Konvertierung in SVG durchzuführen.

verwandte Informationen