Carregando o arquivo bibtex no arquivo de modo organizacional

15

Estou tentando org-modefazer quase tudo. Na minha atividade de redação científica, gostaria de desenhar um artigo inteiro em um .orgarquivo e depois exportá-lo para o LaTeX. Eu não quero carregar o .bibarquivo bibtex no init.elcomo eu poderia ter vários. Por enquanto, adicionei isso no início do meu .orgarquivo:

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

Mas eu tenho que executá-lo manualmente sempre. Existe alguma maneira de torná-lo automático? O ideal seria ter uma diretiva no início de cada .orgarquivo dizendo emacs: "ok, agora você deve carregar este .bib arquivo". Alguma dica? Obrigado.

petrux
fonte
Uma variável local do arquivo não funcionaria? Por exemploM-x add-file-local-variable
olaf b
Obrigado pela resposta. Infelizmente, não é o que estou procurando. Dessa forma, toda vez que carrego o arquivo, preciso digitar o comando. Algo pouco #+STARTUP: do this.
petrux
Qual comando? Você só precisa definir a variável local do arquivo uma vez.
precisa
Você estava certo! Usando o add-file-local-variable-prop-lineeu poderia gerar a # -*- reftex-default-bibliography: ("./references.bib"); -*-linha no início do arquivo.
petrux

Respostas:

19

Adicionar uma linha como a seguinte é suficiente para dizer org-modequal .bibarquivo consultar:

#+BIBLIOGRAPHY: refs plain

refsé o nome do arquivo BibTeX ( .bibextensão omitida) e plainé o bibliographystyle.

Você pode ligar org-reftex-citation(vinculado C-c C-x [por padrão) para inserir referências.

A partir da documentação:

(org-reftex-citation)

Use reftex-citationpara inserir uma citação no buffer. Isso procura uma linha como

#+BIBLIOGRAPHY: foo plain option:-d

e deriva dele que foo.bibé o arquivo bibliográfico relevante para este documento. Em seguida, instala o ambiente necessário para o RefTeX funcionar nesse buffer e solicita reftex-citationa inserção de uma citação no buffer.

A exportação dessas citações para o LaTeX e o HTML é realizada pelo pacote contribuído ox-bibtexpor Taru Karttunen.

Como a última frase sugere, você precisará adicionar

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

para o seu arquivo init para garantir que as referências sejam exportadas para o LaTeX corretamente. Quando configurei isso por mim, descobri que também precisava personalizar org-latex-pdf-processpara fazer com que as exportações de PDF funcionassem:

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

Termo aditivo

Se você não quiser usar a ligação padrão org-reftex-citation, poderá configurar uma ligação de chave personalizada para ela. Por exemplo, o seguinte vincula org-reftex-citationà ligação padrão para reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)
itsjeyd
fonte
Obrigado pela resposta. Não estou marcando isso como correto apenas porque vejo o uso de # -*- reftex-default-bibliography: ("./references.bib"); -*-equivalente, com a vantagem de poder usar a ligação de chave RefTeX usual para adicionar uma nova referência. Estou esquecendo de algo? Vamos editar a resposta para torná-la mais completa para qualquer futuro leitor? Obrigado.
petrux
@petrux Você pode vincular org-reftex-citationa mesma sequência de teclas que reftex-citationnormalmente usa ... Veja as atualizações na minha resposta.
itsjeyd
Entendo que não há como usar vários arquivos de bibliografia com org-reftex-citation? Se eu adicionar um segundo #+BIBLIOGRAPHY, o primeiro parece ser ignorado.
Brian Z
@BrianZ Eu não acho que o caso de uso que você descreve seja suportado imediatamente. Mas talvez alguém aqui tenha uma solução manual? Se eu fosse você, faria uma nova pergunta (apontando para este tópico como referência); definitivamente parece algo que outras pessoas também podem estar interessadas.
itsjeyd
11
Avaliar (setq reftex-default-bibliography '("./a.bib" "./b.bib"))parece fazer o truque. O mesmo acontece # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, embora emita um aviso de que essa variável não deve ser definida localmente.
Brian Z
4

Parece que o ox-bibtex não está incluído no pacote organizacional mais recente (8.2.10-34-gc41bbc-elpa). Então eu procurei online e coloquei no diretório / org / lisp / uma vez baixado. Mas encontrei o seguinte erro ao tentar fazer uma exportação envolvendo alguns bibtex.

A definição da função do símbolo é nula: org-element-insert-before

Então eu verifico o arquivo 'org-element.el', é claro que não existe essa função predefinida. Mas por que não existe? O documento da API on-line do elemento org o mencionou uma vez .

Então, acho que atualmente é impossível usar o RefTeX como a forma como o documento descreve, a menos que você esteja disposto a mudar para a versão beta ou outra mais antiga. Vejo

Aqui eu compartilho minha maneira de usar a versão beta

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

  2. Mova a pasta para ~/.emacs.d/e nomeie-a comoorg-beta

  3. Modifique load-path, deixe a versão beta sombrear outra versão e inclua o diretório de contribuição do usuário

    (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))

(opcional) você pode usar o comando make para compilar o arquivo de origem e criar o documento

  1. Agora você pode (require 'ox-bibtex). Eu prefiro escrever assim:(eval-after-load 'org (require 'ox-bibtex))

  2. Para gerar a lista de referências no lugar certo, coloque algo como #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dno final do arquivo organizacional. Mais opções, consulte o documento de ajuda emox-bibtex.el

  3. Para que a peça de exportação HTML funcione corretamente, você pode precisar do bibtex2html mais recente, ou seja, 1,98. Para construí-lo a partir da fonte, faça o download no github e siga as instruções no documento de ajuda 'README'.

Se você estiver usando janelas como eu, use o Cygwin64 com todos os pacotes devel. Usando Cygwin64, cd para o diretório bibtex2html e digite ./configure, wait finish e digite make, wait finish. Agora, neste dir, você vai ter bib2bib.exe, bibtex2html.exee aux2bib. Copie-os para algum diretório no seu ambiente var PATH. Teste-o digitando bibtex2htmlo cmd.

Eu tenho que fazer o trabalho acima porque uso texlive2014. Se você é um usuário miktek, o bibtex2html 1.95 pode funcionar bem, o que pode ser facilmente instalado com um instalador do Windows.

  1. Para fazer com que a peça de exportação de PDF funcione corretamente, use o seguinte código para inicializar seu modo organizacional:

    (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"))
    

É a parte 'bibtex' que faz o trabalho. Eu uso o comando shell escape para um pacote de látex cunhado.

empenguin
fonte
Parece-me que sua resposta está relacionada apenas à pergunta, no sentido de que ela também é sobre org-mode e ox-bibtex. Como seu problema é diferente, é melhor se você abrir uma pergunta separada, na qual outras pessoas possam fornecer respostas direcionadas.
páprica
11
Eu só quero fazer um complemento à resposta de itsjeyd. itsjeyd sugere seguir o documento de org-reftex-citation. Eu fiz e obtive o problema acima. Caso outras pessoas tenham a mesma situação, compartilhei minha investigação aqui.
empenguin
O IIRC, o pacote ELPA do modo organizacional, não inclui os arquivos abaixo contrib/lisp, que incluem ox-bibtex. Então você teria que instalar o modo organizacional a partir da fonte, incluindo contrib/lisp ou apenas copiar ox-bibtex.elpara o caminho de carregamento.
paprika
11
Sim. Clono a versão beta da organização. Agora funciona bem.
empenguin
5
@ paprika Não é necessário instalar a org-modepartir da fonte para obter o contribdiretório. Conforme explicado aqui , a Org possui seu próprio arquivo ELPA. Tudo o que você precisa fazer é adicionar esse arquivo package-archives; você pode instalar (e atualizar) org-plus-contribusando o gerenciador de pacotes. Obviamente, isso não quer dizer que a abordagem que você sugere não funcione; Eu só queria mencionar (para qualquer outra pessoa que se deparar com essa discussão) que existe outra abordagem que não envolve a sobrecarga de ter que atualizar org-modeseparadamente git.
itsjeyd