Atom에서 latex용 패키지 만들기

16552 단어 LaTeXATOM

동기



Atom에서 latex를 쓰고 있지만, 많이 사용한다 \itemize 라든지 \item Atom이라면 어떻게 할 수 있을까 해 볼까.

목표



tex 파일을 편집하는 동안 alt-enter 로 줄 바꿈하고 \item , alt-shift-enter
\begin{itemize}
  \item %ここにカーソル
\end{itemize}

같은 느낌으로 하고 싶다.

환경


$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G65
$ atom -v
Atom    : 1.29.0
Electron: 2.0.5
Chrome  : 61.0.3163.100
Node    : 8.9.3

프로그램 만들기



Atom의 API 이나 기존의 패키지를 참고로 만든다.

init.coffee
atom.commands.add 'atom-text-editor[data-grammar~="latex"]', 'custom:newline-item', ->
  editor = atom.workspace.getActiveTextEditor()
  view = atom.views.getView editor
  editor.transact =>
    atom.commands.dispatch view, 'editor:newline'
    editor.insertText('\\item ')

atom.commands.add 'atom-text-editor[data-grammar~="latex"]', 'custom:newline-itemize', ->
  editor = atom.workspace.getActiveTextEditor()
  cursor = editor.getLastCursor()
  view = atom.views.getView editor
  editor.transact =>
    atom.commands.dispatch view, 'editor:newline'
    editor.insertText('\\begin{itemize}')
    atom.commands.dispatch view, 'editor:newline'
    editor.insertText('\\item ')
    pos = cursor.getBufferPosition()
    atom.commands.dispatch view, 'editor:newline'
    editor.insertText('\\end{itemize}')
    cursor.setBufferPosition(pos)

keymap.cson
'atom-text-editor[data-grammar~="latex"]':
  'alt-enter': 'custom:newline-item'
  'alt-shift-enter': 'custom:newline-itemize'


custom:newline-itemize'\\item ' 이나 '\\end{itemize}' 의 들여쓰기가 자동으로 행해지므로, 조사하면 language-latex 패키지에 의한 것으로 판명.

패키지 만들기



병아리 만들기



Atom 내에서 cmd-shift-PPackage Generator: Generate Package/Users/aaaa/github/latex-itemizer
$ tree
.
|-- keymaps          # ショートカットキー
|   `-- latex-itemizer.json
|-- lib              # 実装
|   |-- latex-itemizer-view.js
|   `-- latex-itemizer.js
|-- menus            # メニューバーとコンテキストメニュー
|   `-- latex-itemizer.json
|-- package.json     # パッケージの基本情報
|-- spec             # テスト
|   |-- latex-itemizer-spec.js
|   `-- latex-itemizer-view-spec.js
`-- styles           # スタイル
    `-- latex-itemizer.less

이식



기존 패키지를 참고로 만들어 이번 프로그램은 이런 느낌.
$ tree
.
|-- keymaps
|   `-- latex-itemizer.cson
|-- lib
|   `-- latex-itemizer.coffee
`-- package.json

lib/latex-itemizer.coffee
{CompositeDisposable} = require 'atom'

module.exports =
  subscriptions: null

  activate: ->
    @subscriptions = new CompositeDisposable
    @subscriptions.add atom.commands.add 'atom-workspace', {
      'latex-itemizer:newline-item'    : => @newline_item()
      'latex-itemizer:newline-itemize' : => @newline_itemize()
    }

  deactivate: ->
    @subscriptions.dispose()

  newline_item: ->
    editor = atom.workspace.getActiveTextEditor()
    view = atom.views.getView editor
    editor.transact =>
      atom.commands.dispatch view, 'editor:newline'
      editor.insertText('\\item ')

  newline_itemize: ->
    editor = atom.workspace.getActiveTextEditor()
    cursor = editor.getLastCursor()
    view = atom.views.getView editor
    editor.transact =>
      atom.commands.dispatch view, 'editor:newline'
      editor.insertText('\\begin{itemize}')
      atom.commands.dispatch view, 'editor:newline'
      editor.insertText('\\item ')
      pos = cursor.getBufferPosition()
      atom.commands.dispatch view, 'editor:newline'
      editor.insertText('\\end{itemize}')
      cursor.setBufferPosition(pos)

keymaps/latex-itemizer.cson
'atom-text-editor[data-grammar~="latex"]':
  'alt-enter': 'latex-itemizer:newline-item'
  'alt-shift-enter': 'latex-itemizer:newline-itemize'

package.json
{
  "name": "latex-itemizer",
  "main": "./lib/latex-itemizer",
  "version": "0.0.0",
  "description": "For latex-itemizer",
  "activationCommands": {
    "atom-text-editor[data-grammar~=\"latex\"]": [
      "latex-itemizer:newline-item",
      "latex-itemizer:newline-itemize"
    ]
  },
  "repository": "https://github.com/atom/latex-itemizer",
  "license": "MIT",
  "engines": {
    "atom": ">=1.0.0 <2.0.0"
  },
  "dependencies": {
    "atom-package-dependencies": "latest"
  },
  "package-dependencies": {
    "language-latex": "1.1.1"
  }
}
  • newline_itemize 를 깨끗이 쓰고 싶지만, 움직이기 때문에…
  • package.json 에 따라 패키지 부분 "package-dependencies" 잊지 마세요.

  • 테스트


    ctrl-alt-cmd-L 에서 Atom을 다시 읽고 tex 파일에서 시도하지만 'alt-enter': 'latex-itemizer:newline-item'가 작동하지 않습니다.
    키맵이 Atom 본래의 것과 중복하고 있는 것이 판명.


    Overriding core keybindings? - support - Atom Discussion 을 참고로 keymaps/latex-itemizer.cson 를 수정.

    keymaps/latex-itemizer.cson
    '.editor[data-grammar~="latex"]:not([mini])':
      'alt-enter': 'latex-itemizer:newline-item'
      'alt-shift-enter': 'latex-itemizer:newline-itemize'
    

    이것으로 잘 갔기 때문에 끝.

    공개편에

    좋은 웹페이지 즐겨찾기