#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}")))