Eksportować plik trybu org jako plik PDF za pomocą wiersza polecenia?

11

Jakich argumentów wiersza polecenia używam, aby Emacs wyeksportował plik w trybie org do pliku Beamer PDF? (Chcę utworzyć plik, Makefilektóry generuje plik PDF podczas uruchamiania użytkownika make).

Próbowałem zastosować się do tej odpowiedzi, ale nie udało mi się jej uruchomić:

$ emacs --batch foo.org -f org-beamer-export-to-pdf
Symbol's function definition is void: org-beamer-export-to-pdf
$ emacs --batch -l ox-beamer foo.org -f org-beamer-export-to-pdf
Cannot open load file: ox-beamer

Powyższy błąd wynika z faktu, że pliki trybu org znajdują się w niestandardowej lokalizacji i mój plik ~/.emacs.d/init.elnie jest ładowany ( --batchoznacza to -qrównież --no-init-file).

Jeśli powiem Emacsowi, aby załadował mój plik init, zadziała:

$ emacs --batch -l ~/.emacs.d/init.el foo.org -f org-beamer-export-to-pdf

Nie działa to jednak w przypadku innych użytkowników, którzy używają ~/.emacslub ~/.emacs.elzamiast tego ~/.emacs.d/init.el. Próbowałem powiedzieć Emacsowi, żeby się załadował, user-init-fileale to nie zadziałało:

$ emacs --batch --eval '(load user-init-file)' foo.org -f org-beamer-export-to-pdf
Wrong type argument: stringp, nil

Zakładając, że wszyscy użytkownicy mogą z powodzeniem nacisnąć przycisk, C-x C-e l Paby wyeksportować plik Beamer PDF podczas interaktywnego używania Emacsa, jakie nieinteraktywne polecenie wygeneruje plik PDF?

Richard Hansen
źródło
eval (require 'org)lub coś w tym rodzaju - Twój plik init wykonuje ładowanie, które --batchjest zabronione.
Sean Allred
Spróbuj czegoś takiego emacs -u $USER --batch --eval '(message "-----> My user-init-file: "%s" user-init-file)'. Jeśli nie załadujesz pliku init, prawdopodobnie będziesz potrzebować ox-beamer.
mutbuerger
Może się przydać github.com/fniessen/orgmk .
Ista

Odpowiedzi:

8

Dla mnie działało:

emacs \
    -u "$(id -un)" \
    --batch \
    --eval '(load user-init-file)' \
    foo.org \
    -f org-beamer-export-to-pdf

Dzięki, przejdź do @mutbuerger po wskazówki, które należy przekazać, -u <username>aby je user-init-filezdefiniować.

Richard Hansen
źródło
W moim przypadku stwierdziłem, że muszę go usunąć (load user-init-file)i zastąpić określonymi (require 'blah)wyrażeniami s, aby działał (używając emacsa 24.5.1).
Mark