Jak mogę przełączać się między konwersją pdflatex i xelatex w Sublime Text 2?

9

Często przełączam się między kompilowaniem „klasycznych” dokumentów LaTeX i XeTeX.

Sublime Text 2 ma pakiet o nazwie LaTeXTools to pozwala budować dokumenty LaTeX za pomocą prostego Cmd b . Schludny.

Plik kompilacji LaTeX.sublime-build oczywiście istnieje w standardowym folderze pakietu i możesz go skopiować na swój User folder, aby go dostosować. Tutaj możesz zmienić argumenty podane latexmk, a mianowicie, aby przełączyć się z pdflatex do xelatex, na przykład tak:

"cmd": ["latexmk", "-cd",
  //"-e", "\\$pdflatex = 'pdflatex %O -interaction=nonstopmode -synctex=1 %S'",
  "-e", "\\$pdflatex = 'xelatex %O -interaction=nonstopmode -synctex=1 %S'",
  //"-silent",
  "-f", "-pdf"],

Teraz jest to bardzo żmudne, że za każdym razem, gdy otwieram inny dokument - otwórz moje preferencje dotyczące budowania, skomentuj jedną linię, zapisz itd.

W idealnej sytuacji chciałbym móc włączyć silnik

  • … Automatycznie - TextMate na przykład jakoś to robi, a ja mogę skompilować zarówno dokumenty LaTeX, jak i dokumenty XeTeX za pomocą prostego Cmd R , chociaż konfiguracja TextMate jest ustawiona na pdflatex. Może to trochę latexmk.pl -fu, nie wiem.

  • … Za pomocą prostego skrótu klawiaturowego lub ustawienia - Może naciskając Cmd L , Cmd X lub podobne. To przełącza się między pdflatex i xelatex budynek.

Jak mogłem to założyć?

slhck
źródło

Odpowiedzi:

12

Uwaga: LaTeXTools dla Sublime Text obsługuje teraz automatyczne wykrywanie silnika, jeśli plik zaczyna się od %!TEX program = <program>, gdzie <program> jest dowolny z pdflatex, xelatex lub lualatex. Poniższe instrukcje są konieczne tylko wtedy, gdy z jakiegokolwiek powodu trzeba ręcznie przełączać silniki.


Weź LaTeX.sublime-build plik w LaTeXTools folder pod ~/Library/Application Support/Sublime Text 2/Packages i skopiuj go do ~/Library/Application Support/Sublime Text 2/Packages/User/, ale zrób to dwa razy i nadaj tym plikom następującą nazwę:

  • LaTeX.sublime-build.latex
  • LaTeX.sublime-build.xetex

Zmień pliki, aby użyć pdflatex dla LaTeX i xelatex silniki odpowiednio dla XeTeX (jak widać w pytaniu).

Następnie utwórz nową wtyczkę Narzędzia »Nowa wtyczka… (zapisując jako switch.py do lokalizacji powyżej):

import sublime, sublime_plugin, os, shutil, filecmp

class SwitchCommand(sublime_plugin.ApplicationCommand):
  def run(self):
    folder = os.path.expanduser( \
        '~/Library/Application Support/Sublime Text 2/Packages/User/')
    latex_src = folder + 'LaTeX.sublime-build.latex'
    xetex_src = folder + 'LaTeX.sublime-build.xetex'
    dest = folder + 'LaTeX.sublime-build'

    if filecmp.cmp(dest, latex_src):
      sublime.status_message("Switching to XeTeX")
      shutil.copy(xetex_src, dest)
    else:
      sublime.status_message("Switching to LaTeX")
      shutil.copy(latex_src, dest)

I utwórz dla niego skrót klawiaturowy Preferencje »Powiązania kluczy - Użytkownik :

[ {
  "keys": ["super+shift+x"], "command": "switch"
} ]

Możesz również dodać to do swojego menu, dodając Main.sublime-menu plik do twojego User pakiet:

[ {
    "id":"tools", "children":
    [ {
        "command": "switch",
        "caption": "Switch between LaTeX/XeTeX"
      }
    ]
} ]

Będzie to teraz porównywać aktualnie aktywny plik kompilacji z ustawieniami kompilacji potrzebnymi dla XeTeX i LaTeX i przełączać je w razie potrzeby.

To może z pewnością przynieść poprawę, ale na razie działa.

slhck
źródło
Działa jak urok, z wyjątkiem tego, że LaTeXTools nie daje pierwszeństwa LaTeX.sublime-build w moim folderze pakietów użytkownika. Dość dziwne ...
fgb
Czy tworzysz pełną kopię domyślnego LaTeX.sublime-build, które następnie modyfikujesz, lub po prostu dołącz odpowiednie osx część?
fgb
1
Przede wszystkim dzięki za zmiany. Zrobiłem pełną kopię domyślnego pliku i odpowiednio je zmodyfikowałem. Odkryłem jednak, że XeLaTeX dobrze kompiluje wszystkie źródła LaTeXa, przynajmniej na wszystkich testowanych przeze mnie plikach. Może gdzieś w tle jest jakiś problem?
slhck
Kopiowanie i modyfikowanie pełnego pliku domyślnego rozwiązało mój problem. Ciekawe, że użycie tylko XeLaTeX jest wystarczające dla obu. Sprawdzę to w przyszłości, ponieważ na pewno będzie lepiej niż przełączanie kompilatorów. Dzięki za szybką odpowiedź!
fgb