Экспорт латекса в режиме организации: # ЭЛЕКТРОННАЯ почта не экспортируется

#email #emacs #org-mode

Вопрос:

Я пытаюсь добавить адрес электронной почты в свой документ в режиме организации, который необходимо экспортировать в PDF.

Это мои теги заголовка.

 # TITLE: Main Title
# SUBTITLE: Sub Title
# AUTHOR: Author Name
# EMAIL: author@email.com
 

Экспортируются все первые три тега, кроме email заголовка.
Я попробовал этот вариант

 # OPTIONS: toc:nil email:t
 

но все равно это не работает.

Может ли кто-нибудь пролить свет на то, где я совершаю ошибку?

Ответ №1:

Экспорт в PDF осуществляется через LaTeX, и в экспорте LaTeX нет стандартной записи для электронной почты. Другими словами, стандартный класс статей LaTeX, используемый экспортером по умолчанию, не знает, что делать с адресом электронной почты.

Однако организация создает макрос email , который вы можете использовать для размещения адреса электронной почты в любом месте документа, используя {{{email}}} , например, после имени автора в # AUTHOR строке.

Комментарии:

1. Спасибо. Однако использование {{{email}}} -это произвольное помещение адреса электронной почты за пределы maketitle .

2. Если вы используете {{{email}}} макрос в # author: поле, например, как , {{{email}}} после Author Name в вашем примере, он появится в части «Автор» заголовка документа. Я не совсем понимаю, что вы имеете в виду, произвольно выставляя его на улицу.

3. Подзаголовок появится в самом верху страницы без какой-либо связи с документом. Однако я решил эту проблему. Пожалуйста, посмотрите мой ответ ниже. Спасибо за вашу помощь.

Ответ №2:

Я получил решение из списка рассылки emacs-orgmode. Доступ к # электронной почте в экспорте latex.

Нам нужно создать функцию фильтра для замены @EMAIL@ содержимого (я не знаю, какое содержимое мы получаем) и добавить эту функцию org-export-filter-final-output-functions . Фрагмент кода выглядит следующим образом:

 (defun nd-email-filter (contents backend info)
  (let ((email (plist-get info :email)))
    (replace-regexp-in-string "@EMAIL@" email contents t)))
  
(add-to-list 'org-export-filter-final-output-functions (function nd-email-filter))

(setq amsart-class
        '("amsart"
          "\documentclass{amsart}
            [DEFAULT-PACKAGES]
            [PACKAGES]
            [EXTRA]
            {@EMAIL@}"
            ("\section{%s}" . "\section{%s}")
             ("\subsection{%s}" . "\subsection{%s}")
             ("\subsubsection{%s}" . "\subsubsection{%s}")))
  
(add-to-list 'org-latex-classes amsart-class)
 

Затем, в рамках нашего latex class definition , как показано выше, мы можем использовать @EMAIL@ , где бы мы ни хотели, чтобы отображалось электронное письмо.

Я использовал его следующим образом:

 (add-to-list 'org-latex-classes
             '("ethz"
               "\documentclass[a4paper,11pt,article]{memoir}
                \usepackage[utf8]{inputenc}
                ...
                \usepackage{parskip}
                \makeatletter
                \renewcommand{\maketitle}{%
                \begingroup\parindent0pt
                \Small{Aum Tat Sat!}\par\bigskip
                \Huge{\bfseries\@title}\par
                \LARGE{\@subtitle}\par\bigskip
                \small{\@author}\par\smallskip
                \small{@EMAIL@}\par\smallskip
                \normalsize\@date\par\bigskip
                \endgroup\@afterindentfalse\@afterheading}
                \makeatother
                      [PACKAGES]
                      [EXTRA]
                \linespread{1.1}
                 ...
               ("\subparagraph{%s}" . "\subparagraph*{%s}")))