Ładowanie pliku bibtex do pliku w trybie org

16

Staram org-modesię robić prawie wszystko. W mojej działalności naukowej chciałbym naszkicować cały artykuł w .orgpliku, a następnie wyeksportować do LaTeX. Nie chcę ładować .bibpliku bibtex do, init.elponieważ mogłem mieć wiele. Na razie dodałem to na początku mojego .orgpliku:

#+BEGIN_SRC elisp
(setq reftex-default-bibliography '("./references.bib"))
#+END_SRC

Ale muszę to wykonać ręcznie za każdym razem. Czy jest jakiś sposób, aby uczynić to automatycznym? Optymalne byłoby posiadanie dyrektywy na początku każdego .orgpliku z informacją emacs: „ok, teraz powinieneś załadować ten .bib plik”. Jakaś wskazówka? Dzięki.

petrux
źródło
Czy zmienna lokalna pliku nie załatwi problemu? EgM-x add-file-local-variable
olaf b
Dzięki za odpowiedź. Niestety nie tego szukam. W ten sposób za każdym razem, gdy ładuję plik, muszę wpisać polecenie. Coś lilego #+STARTUP: do this.
petrux,
Które polecenie? Trzeba tylko raz ustawić zmienną lokalną pliku.
olaf b
Miałeś rację! Za pomocą add-file-local-variable-prop-lineI mógłbym wygenerować # -*- reftex-default-bibliography: ("./references.bib"); -*-linię na początku pliku.
petrux,

Odpowiedzi:

19

Dodanie następującego wiersza wystarczy, aby powiedzieć, org-modektóry .bibplik ma zostać sprawdzony:

#+BIBLIOGRAPHY: refs plain

refsto nazwa pliku BibTeX ( .bibpominięte rozszerzenie) i plainto bibliographystyle.

Następnie możesz zadzwonić org-reftex-citation( C-c C-x [domyślnie powiązany ), aby wstawić odniesienia.

Z dokumentacji:

(org-reftex-citation)

Użyj, reftex-citationaby wstawić cytat do bufora. To wygląda jak linia

#+BIBLIOGRAPHY: foo plain option:-d

i wywodzi się z niego, który foo.bibjest plikiem bibliografii odpowiednim dla tego dokumentu. Następnie instaluje środowisko niezbędne do pracy RefTeX w tym buforze i wywołuje reftex-citationwstawienie cytatu do bufora.

Eksport takich cytatów zarówno do LaTeX, jak i HTML jest obsługiwany przez dostarczony pakiet ox-bibtexTaru Karttunen.

Jak sugeruje ostatnie zdanie, musisz dodać

(require 'org)
(require 'ox-bibtex)

do pliku init, aby upewnić się, że referencje są poprawnie eksportowane do LaTeX. Kiedy skonfigurowałem to dla siebie, stwierdziłem, że muszę również dostosować org-latex-pdf-process, aby eksport PDF działał:

(setq org-latex-pdf-process '("texi2dvi -p -b -V %f"))

Uzupełnienie

Jeśli nie chcesz używać domyślnego powiązania dla org-reftex-citation, możesz skonfigurować niestandardowe powiązanie klucza dla niego. Na przykład następujące org-reftex-citationpowiązanie z domyślnym powiązaniem dla reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)
itsjeyd
źródło
Dziękuję za odpowiedź. Nie zaznaczam tego jako poprawnego tylko dlatego, że widzę użycie # -*- reftex-default-bibliography: ("./references.bib"); -*-ekwiwalentu, z tą korzyścią, że mogę użyć zwykłego powiązania klucza RefTeX, aby dodać nowe odwołanie. Czy coś brakuje? Czy powinniśmy edytować odpowiedź, aby była bardziej kompletna dla przyszłego czytelnika? Dzięki.
petrux
@petrux Możesz po prostu powiązać org-reftex-citationtę samą sekwencję klawiszy, której reftex-citationnormalnie używa ... Zobacz aktualizacje mojej odpowiedzi.
itsjeyd
Rozumiem, że nie ma możliwości korzystania z wielu plików bibliografii org-reftex-citation? Jeśli dodam drugi #+BIBLIOGRAPHY, pierwszy wydaje się być ignorowany.
Brian Z
@BrianZ Nie sądzę, że opisany przypadek użycia jest obsługiwany po wyjęciu z pudełka. Ale może ktoś tutaj ma rozwiązanie ręcznie walcowane? Gdybym był tobą, zadałbym nowe pytanie (wskazując ten wątek w celach informacyjnych); to zdecydowanie brzmi jak coś, czym inni mogą być zainteresowani.
itsjeyd
1
Ocena (setq reftex-default-bibliography '("./a.bib" "./b.bib"))wydaje się załatwić sprawę. Tak też jest # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, choć generuje ostrzeżenie, że tej zmiennej nie należy definiować lokalnie.
Brian Z
4

Wygląda na to, że ox-bibtex nie jest zawarty w najnowszym pakiecie org (8.2.10-34-gc41bbc-elpa). Przeszukałem go online i po pobraniu umieściłem w katalogu / org / lisp /. Ale natrafiłem na następujący błąd podczas próby eksportu z użyciem bibtex.

Definicja funkcji symbolu jest nieważna: org-element-insert-before

Następnie sprawdzam plik „org-element.el”, oczywiście nie ma takiej predefiniowanej funkcji. Ale dlaczego go nie ma? Dokument API online elementu org wspominał o tym raz .

Sądzę więc, że obecnie nie można używać RefTeX w sposób opisany w dokumencie, chyba że chcesz przejść na wersję beta lub starszą. Widzieć

Tutaj udostępniam sposób korzystania z wersji beta

  1. git clone git://orgmode.org/org-mode.git

  2. Przenieś folder ~/.emacs.d/i nazwij go jakoorg-beta

  3. Zmodyfikuj load-path, pozwól, aby wersja beta śledziła inną wersję i dołącz katalog użytkownika

    (add-to-list 'load-path (expand-file-name "org-beta\\lisp" user-emacs-directory))

    (add-to-list 'load-path (expand-file-name "org-beta\\org-contrib\\lisp" user-emacs-directory))

(opcjonalnie) możesz użyć polecenia make, aby skompilować plik źródłowy i skompilować dokument

  1. Teraz możesz (require 'ox-bibtex). Wolę pisać w ten sposób:(eval-after-load 'org (require 'ox-bibtex))

  2. Aby wygenerować listę odnośników we właściwym miejscu, umieść coś podobnego #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dna końcu pliku org. Więcej opcji można znaleźć w dokumencie pomocy wox-bibtex.el

  3. Aby część eksportu HTML działała poprawnie, możesz potrzebować najnowszego bibtex2html, tj. 1,98. Aby zbudować go ze źródła, pobierz go z github i postępuj zgodnie z instrukcjami zawartymi w dokumencie pomocy „README”.

Jeśli używasz systemu Windows takiego jak ja, użyj Cygwin64 ze wszystkimi pakietami devel. Używając Cygwin64, przejdź do katalogu bibtex2html i wpisz ./configure, czekaj zakończ, a następnie wpisz make, czekaj zakończ. Teraz w tym katalogu, dostaniesz bib2bib.exe, bibtex2html.exei aux2bib. Skopiuj je do katalogu w swoim środowisku var PATH. Przetestuj to, wpisując bibtex2htmlcmd.

Muszę wykonać powyższą pracę, ponieważ używam texlive2014. Jeśli jesteś użytkownikiem miktek, bibtex2html 1.95 może po prostu dobrze działać, co można łatwo zainstalować za pomocą instalatora systemu Windows.

  1. Aby część eksportu PDF działała poprawnie, użyj następującego kodu, aby zainicjować tryb organizacji:

    (setq org-latex-pdf-process
          '("xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "bibtex %b"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
    

To część „bibtex” spełnia swoje zadanie. Używam polecenia ucieczki powłoki dla wybitej paczki lateksu.

empenguin
źródło
Wydaje mi się, że twoja odpowiedź dotyczy tylko pytania w tym sensie, że dotyczy również trybu org i ox-bibtex. Ponieważ Twój problem jest inny, najlepiej jest otworzyć osobne pytanie, w którym inni mogą udzielić ukierunkowanych odpowiedzi.
papryka
1
Chciałbym tylko uzupełnić odpowiedź udzieloną przez itsjeyd. itsjeyd zasugerować postępowanie zgodnie z dokumentem org-reftex-cititation. Zrobiłem i dostałem powyższy problem. Na wypadek, gdyby inne osoby spotkały się z tą samą sytuacją, podzieliłem się tutaj moim dochodzeniem.
empenguin
IIRC pakiet ELPA trybu org nie zawiera plików pod contrib/lisp, w tym ox-bibtex. Musisz więc zainstalować tryb organizacji ze źródła, w tym contrib/lisp lub po prostu skopiować ox-bibtex.elna ścieżkę ładowania.
papryka
1
Tak. Sklonowałem wersję beta org. Teraz działa dobrze.
empenguin
6
@paprika Nie ma potrzeby instalowania org-modeze źródła, aby uzyskać contribkatalog. Jak wyjaśniono tutaj , Org ma własne archiwum ELPA. Wszystko, co musisz zrobić, to dodać to archiwum package-archives; następnie możesz zainstalować (i zaktualizować) org-plus-contribza pomocą menedżera pakietów. Oczywiście nie oznacza to, że proponowane podejście nie działa; Chciałem tylko wspomnieć (dla każdego, kto spotyka się z tą dyskusją), że istnieje inne podejście, które nie wiąże się z koniecznością org-modeosobnej aktualizacji git.
itsjeyd