Orgmode Latex 导出:#+EMAIL 不导出
Orgmode Latex Export: #+EMAIL is not exported
我正在尝试在必须导出为 PDF 的组织模式文档中添加电子邮件地址。
这是我的 header 标签。
#+TITLE: Main Title
#+SUBTITLE: Sub Title
#+AUTHOR: Author Name
#+EMAIL: author@email.com
除 email
header 外,所有前三个标签都已导出。
我尝试了选项
#+OPTIONS: toc:nil email:t
但还是不行。
谁能指出我哪里做错了?
导出为 PDF 是通过 LaTeX 进行的,并且在 LaTeX 导出中没有用于电子邮件的标准条目。换句话说,导出器默认使用的标准 LaTeX 文章 class 不知道如何处理电子邮件地址。
但是,org 创建了一个宏 email
,您可以使用 {{{email}}}
将电子邮件地址放在文档中您希望的任何位置,例如,在#+AUTHOR
行上的作者姓名。
我从 emacs-orgmode 邮件列表中得到了解决方案。
Accessing #+EMAIL in latex export.
我们需要创建一个过滤函数来替换内容中的 @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}")))
我正在尝试在必须导出为 PDF 的组织模式文档中添加电子邮件地址。
这是我的 header 标签。
#+TITLE: Main Title
#+SUBTITLE: Sub Title
#+AUTHOR: Author Name
#+EMAIL: author@email.com
除 email
header 外,所有前三个标签都已导出。
我尝试了选项
#+OPTIONS: toc:nil email:t
但还是不行。
谁能指出我哪里做错了?
导出为 PDF 是通过 LaTeX 进行的,并且在 LaTeX 导出中没有用于电子邮件的标准条目。换句话说,导出器默认使用的标准 LaTeX 文章 class 不知道如何处理电子邮件地址。
但是,org 创建了一个宏 email
,您可以使用 {{{email}}}
将电子邮件地址放在文档中您希望的任何位置,例如,在#+AUTHOR
行上的作者姓名。
我从 emacs-orgmode 邮件列表中得到了解决方案。 Accessing #+EMAIL in latex export.
我们需要创建一个过滤函数来替换内容中的 @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}")))