Как экспортировать ссылку на блок #begin_src в LaTeX

#emacs #latex #org-mode

#emacs #Латекс #org-режим

Вопрос:

Я экспортирую файл ORG в LaTeX с org-latex-listings установленным значением t . Файл содержит некоторые исходные списки, и я хочу вставить некоторые ссылки на них.

В сгенерированном TEX-файле имена ссылок, включенные в ref , похоже, переводятся с помощью org-mode, но label опция lstset сохраняется как есть. Таким образом, pdflatex не удается найти правильную ссылку и выдает сообщение LaTeX Warning: There were undefined references.

Вот пример MWE:

 # latex_header: usepackage{listings}
First simple java program in listing [[thesourcelisting]]
# name: thesourcelisting
# caption: Simple java program
# BEGIN_SRC java
public static void main(String[] args){
  System.exit(0);
}
# END_SRC
  

При экспорте в виде файла LaTeX ( C-c C-e l t ) я получил

 % Created 2016-10-18 mar 14:50
documentclass[11pt]{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{fixltx2e}
usepackage{graphicx}
usepackage{grffile}
usepackage{longtable}
usepackage{wrapfig}
usepackage{rotating}
usepackage[normalem]{ulem}
usepackage{amsmath}
usepackage{textcomp}
usepackage{amssymb}
usepackage{capt-of}
usepackage{hyperref}
usepackage{listings}

author{alvaro}
date{today}
title{}
hypersetup{
 pdfauthor={alvaro},
 pdftitle={},
 pdfkeywords={},
 pdfsubject={},
 pdfcreator={Emacs 25.1.2 (Org mode 8.3.6)}, 
 pdflang={English}}
begin{document}

tableofcontents

First simple java program in listing ref{orgsrcblock1}
lstset{language=java,label=thesourcelisting,caption={Simple java program},captionpos=b,numbers=none}
begin{lstlisting}
public static void main(String[] args){
  System.exit(0);
}
end{lstlisting}
end{document}
  

Исходное имя thesourcelisting преобразуется в orgsrcblock1 в ref команде, но не в lstset команде.

Я использую GNU Emacs 25.1.2.

Ответ №1:

Попробуйте установить org-latex-prefer-user-labels значение t .

В строке документа переменной частично указано (do C-h v org-latex-prefer-user-labels RET , чтобы получить все целиком):

Используйте предоставленные пользователем метки вместо внутренних, если они не равны нулю.

Если эта переменная не равна нулю, Org будет использовать значение свойства CUSTOM_ID, ключевое слово NAME или цель Org в качестве ключа для генерируемых команд label .

По умолчанию Org создает свои собственные внутренние метки во время экспорта LaTeX. Этот процесс гарантирует, что ключи label уникальны и действительны, но это означает, что ключи недоступны до начала процесса экспорта.