From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Doyley, Marvin M." Subject: Re: exporting org to docx Date: Tue, 27 Jun 2017 23:21:31 +0000 Message-ID: References: <3ECD3A60-C8B0-4EA9-9A79-C4DDF133E870@ur.rochester.edu> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="Apple-Mail=_CA020F2C-9085-4EBB-ABAC-F1B8ED7805F3"; protocol="application/pgp-signature"; micalg=pgp-sha512 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37888) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPznk-0003x4-Kv for emacs-orgmode@gnu.org; Tue, 27 Jun 2017 19:21:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dPzng-0003vD-HN for emacs-orgmode@gnu.org; Tue, 27 Jun 2017 19:21:44 -0400 Received: from mail-co1nam03on0110.outbound.protection.outlook.com ([104.47.40.110]:23018 helo=NAM03-CO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dPznf-0003ud-Pc for emacs-orgmode@gnu.org; Tue, 27 Jun 2017 19:21:40 -0400 In-Reply-To: Content-Language: en-US List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: John Kitchin Cc: "emacs-orgmode@gnu.org" , "Doyley, Marvin M." --Apple-Mail=_CA020F2C-9085-4EBB-ABAC-F1B8ED7805F3 Content-Type: multipart/mixed; boundary="Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E" --Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Here is a sample file that I have been using, --Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E Content-Disposition: attachment; filename=simple_test.org Content-Type: application/octet-stream; name="simple_test.org" Content-Transfer-Encoding: 7bit #+title: Exporting org to docx #+options: toc:nil * Simple text Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod lorem sit amet suscipit posuere. Aliquam eu venenatis nunc. Sed eget elit dui. Nulla ac tincidunt erat. Cras porta dui enim, sed sagittis ligula feugiat at. Fusce at metus vitae lacus imperdiet luctus. Vestibulum molestie placerat lacus vel aliquam. Nulla leo orci, aliquet a eleifend et, tincidunt eu ex. Integer vitae facilisis enim. Pellentesque faucibus eros volutpat, auctor odio eleifend, condimentum elit. Mauris vestibulum lacus ac massa fringilla, ut fringilla nisi hendrerit. In id rhoncus eros. Praesent quis facilisis nunc. Nulla ut sodales justo. Donec tincidunt vulputate mi quis aliquam. Aliquam ligula justo, sagittis ut nisl ac, imperdiet tristique dui. Nunc gravida ultrices bibendum. Cras eget dui libero. Nam turpis turpis, consequat vitae sollicitudin in, volutpat et neque. Nam porta consectetur nulla, nec condimentum ipsum iaculis sed. Suspendisse eu nulla eget arcu porta convallis. Nunc aliquet, nibh in vulputate pharetra, enim erat fringilla orci, sit amet pharetra dolor risus ac nisl. Praesent efficitur tortor lorem, aliquet auctor urna sagittis nec. Praesent dictum rutrum quam a ultrices. Nunc vitae porta lorem, congue efficitur leo. Aenean sollicitudin arcu urna. Quisque vehicula justo tellus, in ultrices justo suscipit nec. Nullam non ullamcorper ipsum. Curabitur magna odio, rhoncus ac rhoncus sit amet, vehicula non turpis. Nam dapibus consequat est in porta. Nam ac congue erat. Sed in leo in enim porttitor tempor a eu tortor. Etiam in nibh eu nisl posuere sollicitudin. Fusce enim urna, consequat sit amet consequat ut, vehicula at risus. Etiam eget sapien tempus, luctus neque eget, sollicitudin mauris. Nullam posuere vel magna id mollis. Phasellus iaculis rutrum enim vel molestie. Proin vitae sagittis dolor, quis bibendum sapien. Quisque convallis dapibus varius. Nam euismod dignissim augue, vel maximus risus tempus vel. Nunc sit amet erat vitae nulla malesuada bibendum. Integer viverra vestibulum lobortis. Fusce porttitor dolor eu pellentesque viverra. Curabitur eu arcu nec sem consectetur molestie sit amet ut felis. Morbi auctor sapien dui, at pulvinar leo placerat non. Duis ut metus a diam ultricies elementum. Vestibulum quis magna nunc. Fusce ac vestibulum ligula. Proin egestas, metus ut elementum congue, tortor risus hendrerit elit, ut posuere tortor mauris a quam. Etiam vitae ligula vitae urna ornare pharetra. Praesent euismod vestibulum mi in fringilla. In gravida felis vel eros tristique, nec tincidunt ante congue. Fusce faucibus neque augue. Donec eu feugiat velit, non scelerisque est. Morbi eget nunc sollicitudin, vestibulum est vitae, porttitor neque. Praesent suscipit nisi in justo gravida, quis luctus tortor sodales. Ut iaculis sapien quam, nec vestibulum metus euismod in. * Equations \begin{equation} (\lambda + \mu)\nabla(\nabla \cdot \vec{u})+\mu\nabla^2\vec{u}=0 \end{equation} * ipython #+BEGIN_SRC ipython :session :results output drawer import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline x = np.linspace(0,2*np.pi,200) y = np.cos(x) plt.plot(x,y) #+END_SRC #+RESULTS: :RESULTS: [[file:ipython-inline-images/ob-ipython-f14d687d141b30c166e4329dd8339986.png]] :END: --Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E Content-Disposition: attachment; filename=simple_test.tex Content-Type: application/x-tex; name="simple_test.tex" Content-Transfer-Encoding: 7bit % Created 2017-06-27 Tue 15:24 % Intended LaTeX compiler: pdflatex \documentclass[11pt]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{graphicx} \usepackage{grffile} \usepackage{longtable} \usepackage{wrapfig} \usepackage{rotating} \usepackage[normalem]{ulem} \usepackage{amsmath} \usepackage{textcomp} \usepackage{amssymb} \usepackage{capt-of} \usepackage{hyperref} \author{Doyley, Marvin} \date{\today} \title{Exporting org to docx} \hypersetup{ pdfauthor={Doyley, Marvin}, pdftitle={Exporting org to docx}, pdfkeywords={}, pdfsubject={}, pdfcreator={Emacs 25.2.1 (Org mode 9.0.8)}, pdflang={English}} \begin{document} \maketitle \section{Simple text} \label{sec:org28ea644} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod lorem sit amet suscipit posuere. Aliquam eu venenatis nunc. Sed eget elit dui. Nulla ac tincidunt erat. Cras porta dui enim, sed sagittis ligula feugiat at. Fusce at metus vitae lacus imperdiet luctus. Vestibulum molestie placerat lacus vel aliquam. Nulla leo orci, aliquet a eleifend et, tincidunt eu ex. Integer vitae facilisis enim. Pellentesque faucibus eros volutpat, auctor odio eleifend, condimentum elit. Mauris vestibulum lacus ac massa fringilla, ut fringilla nisi hendrerit. In id rhoncus eros. Praesent quis facilisis nunc. Nulla ut sodales justo. Donec tincidunt vulputate mi quis aliquam. Aliquam ligula justo, sagittis ut nisl ac, imperdiet tristique dui. Nunc gravida ultrices bibendum. Cras eget dui libero. Nam turpis turpis, consequat vitae sollicitudin in, volutpat et neque. Nam porta consectetur nulla, nec condimentum ipsum iaculis sed. Suspendisse eu nulla eget arcu porta convallis. Nunc aliquet, nibh in vulputate pharetra, enim erat fringilla orci, sit amet pharetra dolor risus ac nisl. Praesent efficitur tortor lorem, aliquet auctor urna sagittis nec. Praesent dictum rutrum quam a ultrices. Nunc vitae porta lorem, congue efficitur leo. Aenean sollicitudin arcu urna. Quisque vehicula justo tellus, in ultrices justo suscipit nec. Nullam non ullamcorper ipsum. Curabitur magna odio, rhoncus ac rhoncus sit amet, vehicula non turpis. Nam dapibus consequat est in porta. Nam ac congue erat. Sed in leo in enim porttitor tempor a eu tortor. Etiam in nibh eu nisl posuere sollicitudin. Fusce enim urna, consequat sit amet consequat ut, vehicula at risus. Etiam eget sapien tempus, luctus neque eget, sollicitudin mauris. Nullam posuere vel magna id mollis. Phasellus iaculis rutrum enim vel molestie. Proin vitae sagittis dolor, quis bibendum sapien. Quisque convallis dapibus varius. Nam euismod dignissim augue, vel maximus risus tempus vel. Nunc sit amet erat vitae nulla malesuada bibendum. Integer viverra vestibulum lobortis. Fusce porttitor dolor eu pellentesque viverra. Curabitur eu arcu nec sem consectetur molestie sit amet ut felis. Morbi auctor sapien dui, at pulvinar leo placerat non. Duis ut metus a diam ultricies elementum. Vestibulum quis magna nunc. Fusce ac vestibulum ligula. Proin egestas, metus ut elementum congue, tortor risus hendrerit elit, ut posuere tortor mauris a quam. Etiam vitae ligula vitae urna ornare pharetra. Praesent euismod vestibulum mi in fringilla. In gravida felis vel eros tristique, nec tincidunt ante congue. Fusce faucibus neque augue. Donec eu feugiat velit, non scelerisque est. Morbi eget nunc sollicitudin, vestibulum est vitae, porttitor neque. Praesent suscipit nisi in justo gravida, quis luctus tortor sodales. Ut iaculis sapien quam, nec vestibulum metus euismod in. \section{Equations} \label{sec:org5ac7306} \begin{equation} (\lambda + \mu)\nabla(\nabla \cdot \vec{u})+\mu\nabla^2\vec{u}=0 \end{equation} \section{ipython} \label{sec:orgec0edaf} \begin{verbatim} import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline x = np.linspace(0,2*np.pi,200) y = np.cos(x) plt.plot(x,y) \end{verbatim} \begin{center} \includegraphics[width=.9\linewidth]{ipython-inline-images/ob-ipython-f14d687d141b30c166e4329dd8339986.png} \end{center} \end{document} --Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jun 27, 2017, at 10:53 AM, John Kitchin = wrote: >=20 > can you post a small org file that has this problem? >=20 > Doyley, Marvin M. writes: >=20 >> Thanks for point this out, which I have now removed, but I still get = an error. This time I get >>=20 >> pandoc: nil: openFile: does not exist (No such file or directory) >> helm-M-x: Wrong type argument: stringp, nil >>=20 >> Thanks, >> M >> PS here is the back trace >> Debugger entered--Lisp error: (wrong-type-argument stringp nil) >> delete-file(nil) >> (let* ((bibfiles (mapcar (quote expand-file-name) = (org-ref-find-bibliography))) (temp-bib) (bibtex-entries) biboption csl = (current-file (buffer-file-name)) (basename (file-name-sans-extension = current-file)) (tex-file (concat basename ".tex")) (docx-file (concat = basename ".docx"))) (save-buffer) (if bibfiles (progn (setq = bibtex-entries (let* ((bibtex-files bibfiles) (keys (reverse ...)) = (bibtex-entry-kill-ring-max (length keys)) (bibtex-entry-kill-ring = (quote nil))) (let ((wconfig ...)) (unwind-protect (progn ...) = (set-window-configuration wconfig))) (mapconcat (quote identity) = bibtex-entry-kill-ring "\n\n")) temp-bib (make-temp-file "ox-word-" nil = ".bib") biboption (format " --bibliography=3D%s " temp-bib)) (let = ((temp-file temp-bib) (temp-buffer (get-buffer-create = (generate-new-buffer-name " *temp file*")))) (unwind-protect (prog1 = (save-current-buffer (set-buffer temp-buffer) (insert bibtex-entries)) = (save-current-buffer (set-buffer temp-buffer) (write-region nil nil = temp-file nil 0))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer)))))) (setq csl (cdr (assoc "PANDOC-CSL" (org-element-map = (org-element-parse-buffer) (quote keyword) (function (lambda (key) (cons = ... ...))))))) (if csl (setq csl (format " --csl=3D%s " csl)) (setq csl = " ")) (org-latex-export-to-latex async subtreep visible-only body-only = options) (if (file-exists-p docx-file) (progn (delete-file docx-file))) = (shell-command (format "pandoc -s -S %s%s\"%s\" -o \"%s\"" biboption csl = tex-file docx-file)) (delete-file temp-bib) (org-open-file docx-file = (quote (16)))) >> ox-export-via-latex-pandoc-to-docx-and-open() >> funcall-interactively(ox-export-via-latex-pandoc-to-docx-and-open) >> call-interactively(ox-export-via-latex-pandoc-to-docx-and-open = record nil) >> command-execute(ox-export-via-latex-pandoc-to-docx-and-open record) >> helm-M-x(nil #("ox-export-via-latex-pandoc-to-docx-and-open" 0 43 = (match-part "ox-export-via-latex-pandoc-to-docx-and-open"))) >> funcall-interactively(helm-M-x nil = #("ox-export-via-latex-pandoc-to-docx-and-open" 0 43 (match-part = "ox-export-via-latex-pandoc-to-docx-and-open"))) >> call-interactively(helm-M-x nil nil) >> command-execute(helm-M-x) >>=20 >>=20 >>=20 >>=20 >>> On Jun 24, 2017, at 1:07 PM, John Kitchin = wrote: >>>=20 >>> what is this function: my-other-delete-trailing-blank-lines >>>=20 >>> it appears it is not defined. but is getting called in a = before-save-hook. >>>=20 >>> Doyley, Marvin M. writes: >>>=20 >>>> Hi there, >>>>=20 >>>> I am play with John=E2=80=99s ox-word.el function, which us pandoc = to convert org via latex to docx. However, when I try to use it, I get = the following error >>>>=20 >>>> helm-M-x: Wrong type argument: stringp, nil >>>>=20 >>>>=20 >>>> Any suggestion on how to resolve this issue. >>>>=20 >>>> Cheers, >>>> M >>>>=20 >>>> Ps Here is the backtrace >>>>=20 >>>> Debugger entered--Lisp error: (void-function = my-other-delete-trailing-blank-lines) >>>> my-other-delete-trailing-blank-lines() >>>> run-hooks(before-save-hook) >>>> basic-save-buffer(nil) >>>> save-buffer() >>>> write-file("./test.tex.tex") >>>> (let ((coding-system-for-write encoding)) (write-file file)) >>>> (progn (insert output) (let ((coding-system-for-write encoding)) = (write-file file))) >>>> (unwind-protect (progn (insert output) (let = ((coding-system-for-write encoding)) (write-file file))) (and = (buffer-name temp-buffer) (kill-buffer temp-buffer))) >>>> (save-current-buffer (set-buffer temp-buffer) (unwind-protect = (progn (insert output) (let ((coding-system-for-write encoding)) = (write-file file))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer)))) >>>> (let ((temp-buffer (generate-new-buffer " *temp*"))) = (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn = (insert output) (let ((coding-system-for-write encoding)) (write-file = file))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))) >>>> (let ((output (org-export-as backend subtreep visible-only = body-only ext-plist))) (let ((temp-buffer (generate-new-buffer " = *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect = (progn (insert output) (let ((coding-system-for-write encoding)) = (write-file file))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer))))) (if (and (org-export--copy-to-kill-ring-p) = (org-string-nw-p output)) (progn (org-kill-new output))) (or (and = (functionp post-process) (funcall post-process file)) file)) >>>> (if async (let ((with-temp-message "Initializing asynchronous = export process") (current-message)) (unwind-protect (progn (if = with-temp-message (progn (setq current-message (current-message)) = (message "%s" with-temp-message))) (let ((--copy-fun = (org-export--generate-copy-script ...)) (--temp-file (make-temp-file = "org-export-process")) (--coding buffer-file-coding-system)) (let = ((temp-file --temp-file) (temp-buffer ...)) (unwind-protect (prog1 ... = ...) (and ... ...))) (let* ((process-connection-type nil) (--proc-buffer = ...) (--process ...)) (org-export-add-to-stack (get-buffer = --proc-buffer) nil --process) (let (...) (set-process-sentinel --process = ...))))) (and with-temp-message (if current-message (message "%s" = current-message) (message nil))))) (let ((output (org-export-as backend = subtreep visible-only body-only ext-plist))) (let ((temp-buffer = (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer = temp-buffer) (unwind-protect (progn (insert output) (let (...) = (write-file file))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer))))) (if (and (org-export--copy-to-kill-ring-p) = (org-string-nw-p output)) (progn (org-kill-new output))) (or (and = (functionp post-process) (funcall post-process file)) file))) >>>> (let ((ext-plist (org-combine-plists (list (quote :output-file) = file) ext-plist)) (encoding (or org-export-coding-system = buffer-file-coding-system))) (if async (let ((with-temp-message = "Initializing asynchronous export process") (current-message)) = (unwind-protect (progn (if with-temp-message (progn (setq = current-message ...) (message "%s" with-temp-message))) (let = ((--copy-fun ...) (--temp-file ...) (--coding = buffer-file-coding-system)) (let (... ...) (unwind-protect ... ...)) = (let* (... ... ...) (org-export-add-to-stack ... nil --process) (let ... = ...)))) (and with-temp-message (if current-message (message "%s" = current-message) (message nil))))) (let ((output (org-export-as backend = subtreep visible-only body-only ext-plist))) (let ((temp-buffer = (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer = temp-buffer) (unwind-protect (progn (insert output) (let ... ...)) (and = (buffer-name temp-buffer) (kill-buffer temp-buffer))))) (if (and = (org-export--copy-to-kill-ring-p) (org-string-nw-p output)) (progn = (org-kill-new output))) (or (and (functionp post-process) (funcall = post-process file)) file)))) >>>> (if (not (file-writable-p file)) (error "Output file not writable") = (let ((ext-plist (org-combine-plists (list (quote :output-file) file) = ext-plist)) (encoding (or org-export-coding-system = buffer-file-coding-system))) (if async (let ((with-temp-message = "Initializing asynchronous export process") (current-message)) = (unwind-protect (progn (if with-temp-message (progn ... ...)) (let (... = ... ...) (let ... ...) (let* ... ... ...))) (and with-temp-message (if = current-message (message "%s" current-message) (message nil))))) (let = ((output (org-export-as backend subtreep visible-only body-only = ext-plist))) (let ((temp-buffer (generate-new-buffer " *temp*"))) = (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn ... = ...) (and ... ...)))) (if (and (org-export--copy-to-kill-ring-p) = (org-string-nw-p output)) (progn (org-kill-new output))) (or (and = (functionp post-process) (funcall post-process file)) file))))) >>>> org-export-to-file(latex "./test.tex.tex" nil nil nil nil nil) >>>> (let ((outfile (org-export-output-file-name ".tex" subtreep))) = (org-export-to-file (quote latex) outfile async subtreep visible-only = body-only ext-plist)) >>>> org-latex-export-to-latex(nil nil nil nil nil) >>>> (let* ((bibfiles (mapcar (quote expand-file-name) = (org-ref-find-bibliography))) (temp-bib) (bibtex-entries) biboption csl = (current-file (buffer-file-name)) (basename (file-name-sans-extension = current-file)) (tex-file (concat basename ".tex")) (docx-file (concat = basename ".docx"))) (save-buffer) (if bibfiles (progn (setq = bibtex-entries (let* ((bibtex-files bibfiles) (keys (reverse ...)) = (bibtex-entry-kill-ring-max (length keys)) (bibtex-entry-kill-ring = (quote nil))) (let ((wconfig ...)) (unwind-protect (progn ...) = (set-window-configuration wconfig))) (mapconcat (quote identity) = bibtex-entry-kill-ring "\n\n")) temp-bib (make-temp-file "ox-word-" nil = ".bib") biboption (format " --bibliography=3D%s " temp-bib)) (let = ((temp-file temp-bib) (temp-buffer (get-buffer-create = (generate-new-buffer-name " *temp file*")))) (unwind-protect (prog1 = (save-current-buffer (set-buffer temp-buffer) (insert bibtex-entries)) = (save-current-buffer (set-buffer temp-buffer) (write-region nil nil = temp-file nil 0))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer)))))) (setq csl (cdr (assoc "PANDOC-CSL" (org-element-map = (org-element-parse-buffer) (quote keyword) (function (lambda (key) (cons = ... ...))))))) (if csl (setq csl (format " --csl=3D%s " csl)) (setq csl = " ")) (org-latex-export-to-latex async subtreep visible-only body-only = options) (if (file-exists-p docx-file) (progn (delete-file docx-file))) = (shell-command (format "pandoc -s -S %s%s\"%s\" -o \"%s\"" biboption csl = tex-file docx-file)) (delete-file temp-bib) (org-open-file docx-file = (quote (16)))) >>>> ox-export-via-latex-pandoc-to-docx-and-open() >>>> funcall-interactively(ox-export-via-latex-pandoc-to-docx-and-open) >>>> call-interactively(ox-export-via-latex-pandoc-to-docx-and-open = record nil) >>>> command-execute(ox-export-via-latex-pandoc-to-docx-and-open record) >>>> helm-M-x(nil #("ox-export-via-latex-pandoc-to-docx-and-open" 0 43 = (match-part "ox-export-via-latex-pandoc-to-docx-and-open"))) >>>> funcall-interactively(helm-M-x nil = #("ox-export-via-latex-pandoc-to-docx-and-open" 0 43 (match-part = "ox-export-via-latex-pandoc-to-docx-and-open"))) >>>> call-interactively(helm-M-x nil nil) >>>> command-execute(helm-M-x) >>>=20 >>>=20 >>> -- >>> Professor John Kitchin >>> Doherty Hall A207F >>> Department of Chemical Engineering >>> Carnegie Mellon University >>> Pittsburgh, PA 15213 >>> 412-268-7803 >>> @johnkitchin >>> = https://urldefense.proofpoint.com/v2/url?u=3Dhttp-3A__kitchingroup.cheme.c= mu.edu&d=3DDwIFaQ&c=3Dkbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=3Ds3_3= riAscdqtNAzgOuwYB9g0dZVGcp8BNCy_RylYdxU&m=3DfpDGKjoBGMLn-IR_Ppzt26Yc5eU8GW= 50J-DqGll1blc&s=3DjqihIKTRKkfrF9V2SuWfN6RqVs6ghQUh-wXvKohuNi8&e=3D >=20 >=20 > -- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > = https://urldefense.proofpoint.com/v2/url?u=3Dhttp-3A__kitchingroup.cheme.c= mu.edu&d=3DDwIFaQ&c=3Dkbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=3Ds3_3= riAscdqtNAzgOuwYB9g0dZVGcp8BNCy_RylYdxU&m=3DAk2zZPodYjZldCE4XzfFYpSENYzapn= Be2-oTIEbBnI4&s=3DkQj3UIrDBe-cf4dsH6pm2x4G8P9a_nOw-uI1_hgatLI&e=3D --Apple-Mail=_EC20BCBA-3101-4C6C-8FD3-1DA5E4EC5C6E-- --Apple-Mail=_CA020F2C-9085-4EBB-ABAC-F1B8ED7805F3 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- iQEcBAEBCgAGBQJZUuh9AAoJELrZY3BfcCrM6u0H/2L/+TWEDRUAEftAcWMphM/+ RSuGLMCXzeZMX7Tto9JEwELb8+64NyMo6DeMKyhTQDJ4XkmsQG/+cEFb4I/bpMeh uVNR/yehWejb3QbDTSP3Hafz/f8h9cPvlYmq3If1B1l52KIh9bELeAQYFQ2xO4vU or8RdsqarR+HS6sF2Ge9f3JmjY1Z5RukllvZd1k0MRWdE4Tc+pwbfsK5WV6Y6d7E PC7F1gXHpGoJcpdbiQUKel71m7LRh1d9+6VC5cM0YZgjF5Mjr71riuZSAmH9KLS3 CFCFj0y+gCqDYhyfkZB/hHMlCmLRxth498E/UaFyBTqzhIe83VtCUlqYsRypxC0= =vzEG -----END PGP SIGNATURE----- --Apple-Mail=_CA020F2C-9085-4EBB-ABAC-F1B8ED7805F3--