Como referenciar blocos de origem no texto organizacional

8

Desejo criar blocos de código-fonte (em qualquer idioma, incluindo o LaTeX), depois referir-me a eles no texto usando links internos , com descrições como mostrado abaixo. Este post semelhante não está funcionando para mim.

Tenho facilmente conseguido criados muitos blocos de origem utilizando a estrutura comum, por exemplo:

#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Em seguida, adicionei nomes aos blocos porque quero falar sobre eles com links internos. Eu fiz isso adicionando #+NAME:, e também fiz isso:

#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Portanto, o bloco de texto está em algum lugar dentro de um arquivo organizacional (o mesmo no meu caso) e quero inserir um link para esse bloco de código acima usando C-c C-l. Eu tentei isso com e sem uma descrição, então acabando com os dois:

[[some-source-code][my description]]

e

[[some-source-code]]

mas nenhum deles é reconhecido no arquivo PDF exportado. Eu simplesmente recebo um par de pontos de interrogação no arquivo PDF e *Org PDF LaTeX output buffer*há apenas uma mensagem informando:

Hiper referência de código-fonte na página 6 indefinida na linha de entrada 182.

Dentro do próprio arquivo organizacional, os links são mostrados e, se eu clicar neles, sou levado ao bloco de código conforme o esperado.

Na documentação do babel para esses blocos de origem, havia uma frase de aparência inacabada referente a (que eu assumo significar o nome que provei para um bloco de origem), dizendo:

O nome pode ter 20 caracteres e conter… XXX

Existem regras sobre o #+NAME: <label>?

Devo incluir um # + LaTeX_HEADER específico no arquivo organizacional?

Eu sou capaz de criar links para sites que utilizam C-c C-l, com uma descrição - e este é exportado como esperado para PDF.

Eu tenho a versão org 8.2.10, emacs versão 24.5.

n1k31t4
fonte
A exportação de links para PDF é um requisito?
Melioratus 13/03
@ Melioratus - sim, eu gostaria dos links disponíveis (clicáveis) na saída em pdf.
N1k31t4 13/03
Que chatice, os links da minha resposta não serão exportados para PDF. Desculpa. Vou procurar outra solução.
Melioratus 13/03/16
Acho que encontrei uma maneira de vincular o bloco de código ao exportar para PDF. Vou postar minha resposta em breve.
Melioratus 13/03/16
Obrigado por fazer a pergunta! Adicionei o método 3, que será vinculado novamente ao bloco de código quando exportado para PDF.
Melioratus 14/03

Respostas:

8

Se você usa org-ref ( https://github.com/jkitchin/org-ref ), você pode fazer isso:

#+caption: test label:some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC


See Listing ref:some-source-code

Isso exporta para PDF e HTML com links ativos.

John Kitchin
fonte
4

Tente isto

#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Método 1

[[file:::some-source-code]]

Isso deve vincular de volta a some-source-code.

Advertência: [[file:::some-source-code]] está realizando uma pesquisa degenerada e procurará <<some-source-code>>links antes #+NAME: some-source-code.

Método 2

[[file:::/#\+name: +some-source-code/]]

/ regexp /
Faça uma pesquisa de expressão regular por regexp. Isso usa o comando Emacs para ocorrer para listar todas as correspondências em uma janela separada. Se o arquivo de destino estiver no modo Org, a ocorrência da organização será usada para criar uma árvore esparsa com as correspondências.

Método 3

Ao exportar para PDF, isso deve funcionar.

#+BEGIN_LaTeX
\hypertarget{some-source-code}{} 
#+END_LaTeX
#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

#+BEGIN_SRC latex
  See \hyperlink{some-source-code}{some source code}.
#+END_SRC

Espero que tenha ajudado!


Este código foi testado usando o
GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14) de 25/12/2014
- modo org: 8.3.2

Melioratus
fonte
Infelizmente, nenhum deles funciona para mim. Método 2 gera o erro: Not a Tramp file name: (the regex). O método 1 criou um link vazio, com descrição zero e um link para lugar nenhum. Se eu o reescrever para isso: [[file:alg-page-scrape][My Description]]recebo um link para lugar nenhum novamente, mas pelo menos com a descrição que aparece no PDF. Não pretendo parecer arrogante, mas esse tipo de coisa não deveria ser o 'pão com manteiga' do modo org? Ele funciona para arquivos como esperado, mas não para blocos de origem ...
n1k31t4
@ DexterMorgan - Quando você reescreveu os links, usou três pontos, isto é file:::alg-page-scrap? Os exemplos funcionam apenas com três pontos. Então [[file:::alg-page-scrape][My Description]]deve funcionar. Por favor, deixe-me saber se isso não acontecer.
Melioratus 13/03
Eu tentei primeiro com três: e isso não funcionou. Então eu tentei com um depois.
N1k31t4 13/03
@DexterMorgan - Quando você diz que não funciona, você quer dizer ao exportar para PDF?
Melioratus 13/03
Como eu mencionei, há uma aparência normal de link ( org-link-face??), no entanto, nenhum link real. Clicar nele não me levou ao bloco de origem.
N1k31t4 13/03