모든 TeX/LaTeX 기호를 어떻게 얻을 수 있나요?

모든 TeX/LaTeX 기호를 어떻게 얻을 수 있나요?

나는 현재 손으로 쓴 수학 기호(결국 공식)의 온라인 인식에 관한 학사 학위 논문의 실무 부분을 작성하고 있습니다.

현재 내가 겪고 있는 한 가지 문제는 내 데이터베이스에 기호가 있어야 한다는 것입니다. 나는 기본적으로 필요하다

  • 기호에 대한 라텍스 코드(예 A: , $\alpha$, $\rightarrow$, $\mathbb{R}$, ...)
  • 필요한 경우 패키지 이름(예 \usepackage{amsmath}: )
  • SVG

다른 두 가지 정보를 사용하여 SVG를 만들 수 있지만(내가 만들 수 있는 SVG는 최적과는 거리가 멀지만) 현재 해당 기호를 수동으로 입력하는 것보다 더 좋은 방법은 없습니다. 개발자의 말에 따르면 이것은 엄청난 시간 낭비처럼 보입니다.해독하다그는 약 2000개의 기호를 가지고 있다고 합니다(그러나 그는 나에게 데이터베이스를 줄 수 없습니다. 이유는 모르겠습니다).

그래서:LaTeX/TeX에 있는 모든 기호 목록을 어떻게 얻을 수 있나요?

(그런데 사이트는http://write-math.com- 하지만 아직은 매우 초기 알파 릴리스이므로 앞으로 며칠 내에 데이터베이스가 잘릴 수 있으므로 시간을 낭비하지 말고 데이터를 생성하시기 바랍니다. 현재는 기호인식 부분이 존재하지 않습니다.)

답변1

댓글에 언급했듯이 출처는해독하다GitHub에서 사용할 수 있습니다.https://github.com/kirel/detexify.

기호 데이터베이스는 다음에서 제공됩니다.lib/latex/symbols.yaml쉽게 확장 가능하고 필수 패키지 및 모드(텍스트 또는 수학)에 대한 정보에 대한 요구 사항을 충족하는 YAML 형식(아래 샘플)으로 제공됩니다.

# 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 #

rakeSVG 출력은 ​​다음 에 제공된 작업을 조정하여 생성할 수 있습니다.lib/rake/symbol_task.rb. 아래에 이 코드를 처음 적용한 내용을 제시합니다.부인 성명:저는 Ruby의 초보자이며 여기에서 Daniel의 코드 대부분을 제거하므로 이를 수행하는 더 좋은 방법이 있을 것입니다. 이것을 표준이 아닌 출발점으로 삼으십시오.:-)

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

Detexify 저장소의 복제본에서 이러한 수정 작업을 수행했지만 필요한 유일한 파일은 다음과 같습니다.lib/rake/symbol_task.rb,lib/latex/symbol.rb, 그리고lib/latex/symbols.yaml.

모든 SVG 출력을 빌드하려면 rake gen_svgRuby 명령 프롬프트에서 실행하세요.dvisvgm필수입니다. 또는 Ruby 코드를 수정하여 다음 pdflatex과 함께 사용할 수 있습니다.pdf2svg(테스트되지 않음) 또는 Inkscape(명령줄에서)를 사용하여 SVG로 변환을 수행합니다.

관련 정보