浏览代码

I was able to export the testing.Rorg example with org-exp-blocks.el
the results are in existing_tools/exp-blocks/example-for-r.html. To
get this working I had to make two changes...

First in testing.Rorg, I changed every block as follows

from

#+BEGIN_R:

#+END_R

to

#+BEGIN_R

#+END_R

Second I fixed a broken regexp in org-exp-blocks.el

This is capable of running calculations on the R blocks and the inline
\R{} segments, but is not yet able to handle the image generation
commands.

Eric Schulte 16 年之前
父节点
当前提交
4985075c28

+ 90 - 0
existing_tools/exp-blocks/example-for-r.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+lang="en" xml:lang="en">
+<head>
+<title>a &lt;- 3</title>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="generator" content="Org-mode"/>
+<meta name="generated" content="2009-02-05 15:26:32 PST"/>
+<meta name="author" content="Eric Schulte"/>
+<style type="text/css">
+ <!--/*--><![CDATA[/*><!--*/
+  html { font-family: Times, serif; font-size: 12pt; }
+  .title  { text-align: center; }
+  .todo   { color: red; }
+  .done   { color: green; }
+  .tag    { background-color:lightblue; font-weight:normal }
+  .target { }
+  .timestamp { color: grey }
+  .timestamp-kwd { color: CadetBlue }
+  p.verse { margin-left: 3% }
+  pre {
+	border: 1pt solid #AEBDCC;
+	background-color: #F3F5F7;
+	padding: 5pt;
+	font-family: courier, monospace;
+        font-size: 90%;
+        overflow:auto;
+  }
+  table { border-collapse: collapse; }
+  td, th { vertical-align: top; }
+  dt { font-weight: bold; }
+  div.figure { padding: 0.5em; }
+  div.figure p { text-align: center; }
+  .linenr { font-size:smaller }
+  .code-highlighted {background-color:#ffff00;}
+  .org-info-js_info-navigation { border-style:none; }
+  #org-info-js_console-label { font-size:10px; font-weight:bold;
+                               white-space:nowrap; }
+  .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
+                                 font-weight:bold; }
+  /*]]>*/-->
+</style>
+<script type="text/javascript">
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(null != target) {
+     elem.cacheClassElem = elem.className;
+     elem.cacheClassTarget = target.className;
+     target.className = "code-highlighted";
+     elem.className   = "code-highlighted";
+   }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(elem.cacheClassElem)
+     elem.className = elem.cacheClassElem;
+   if(elem.cacheClassTarget)
+     target.className = elem.cacheClassTarget;
+ }
+/*]]>*/-->
+</script>
+</head><body>
+<h1 class="title">a &lt;- 3</h1>
+
+
+<div id="R-1">
+<pre>
+> a
+</pre>
+</div>
+
+<ul>
+<li>
+the value of a is 3
+</li>
+<li>
+the value of a + 3 is 6  
+</li>
+</ul>
+<div id="postamble"><p class="author"> Author: Eric Schulte
+<a href="mailto:schulte.eric@gmail.com">&lt;schulte.eric@gmail.com&gt;</a>
+</p>
+<p class="date"> Date: 2009-02-05 15:26:32 PST</p>
+<p>HTML generated by org-mode 6.20f in emacs 23</p>
+</div></body>
+</html>

+ 12 - 0
existing_tools/exp-blocks/example-for-r.org

@@ -0,0 +1,12 @@
+#+BEGIN_R
+a <- 3
+a
+#+END_R
+
+- the value of a is \R{a}
+- the value of a + 3 is \R{a + 3}  
+
+#+BEGIN_R  hidden_block, echo=FALSE, results=HIDE
+   a <- 3
+   b <- 6
+#+END_R

+ 6 - 3
existing_tools/org-exp-blocks.el → existing_tools/exp-blocks/org-exp-blocks.el

@@ -80,8 +80,10 @@ Each block export function should accept three argumets..."
   :type 'alist)
 
 (defcustom org-export-interblocks
-  '((r org-export-interblocks-format-R)
-    (R org-export-interblocks-format-R))
+  '(
+    (r org-export-interblocks-format-R)
+    (R org-export-interblocks-format-R)
+    )
   "Use this a-list to associate block types with block exporting
 functions.  The type of a block is determined by the text
 immediately following the '#+BEGIN_' portion of the block header.
@@ -316,8 +318,9 @@ export."
     (goto-char start)
     (interblock-initiate-R-buffer)
     (let (code replacement)
-      (while (and (< (point) end) (re-search-forward "\\\\R{\\(.*\\)}" end t))
+      (while (and (< (point) end) (re-search-forward "\\\\R{\\([^}]*\\)}" end t))
 	(save-match-data (setf code (match-string 1)))
+	(message (format "\R{%s}" code))
 	(setf replacement (interblock-R-command-to-string code))
 	(setf replacement (cond
 			   (htmlp replacement)

+ 9 - 0
existing_tools/exp-blocks/running.el

@@ -0,0 +1,9 @@
+(load "org-exp-blocks.el")
+
+(defun org-exp-preprocess ()
+  "This is a simple helper to preprocess a file without actually
+exporting to html or latex.  Useful for debugging."
+  (interactive)
+  (let ((htmlp t))
+    (org-export-blocks-preprocess)))
+

+ 73 - 0
existing_tools/exp-blocks/testing.Rorg

@@ -0,0 +1,73 @@
+# -*- mode: org -*-
+#+OPTIONS:  LaTeX:t
+
+* Sweave and org-mode
+  If you're reading a PDF version of this document, you should also
+  look at [[file:testing.Rorg][testing.Rorg]] (the source file) and [[file:testing.org][testing.org]] (the output
+  of the Sweave process).
+
+  Keep in mind that one of the advantages of a block-based approach is
+  using \texttt{C-'} to edit code in its native mode.
+
+** Use the Sweave package for latex formatting
+   Org allows us to issue commands to be included in \{LaTeX} export.
+#+LATEX_HEADER  \usepackage{Sweave}
+
+** R blocks
+   The first argument to an R block when using Sweave is the label for
+   that block.
+
+   Not all R blocks are printed.  Sweave options allow the printing of
+   the evaluated code, the output of the code, both, or neither.
+
+*** R code that is not printed
+#+BEGIN_R  hidden_block, echo=FALSE, results=HIDE
+   a <- 3
+   b <- 6
+#+END_R
+
+*** R code that is printed
+#+BEGIN_R  visible_block
+   c <- 4
+#+END_R
+   
+   We can use block labels to embed blocks by reference (even if they
+   weren't printed before).
+*** R code that references other blocks
+#+BEGIN_R  combined_block
+#+R_CODEREF:  hidden_block
+#+R_CODEREF:  visible_block
+   a + b +c
+#+END_R
+
+** Inline references to R data
+   We can evaluate R code inline.
+*** Used in text
+    The value of =a= is 3.
+
+*** Used in a table
+    | a     | b     | c     | TOTAL         |
+    |-------+-------+-------+---------------|
+    | \R{a} | \R{b} | \R{c} | \R{a + b + c} |
+
+** Single-line R commands
+   If we want a line of R code to be evaluated but not printed,
+   there's a convenient shorthand.  This only works for single lines
+   of R code, but you can have more than one in a row.
+#+R  library(lattice)
+#+R  data(cars)
+
+** Graphics
+   We use values defined elsewhere in the buffer to produce this
+   graph.  The new CAPTION and LABEL arguments work just fine.
+
+#+CAPTION:  speed by distance
+#+LABEL:  fig:speed_by_distance
+#+BEGIN_R  figure.eps
+print(xyplot(speed ~ dist, cars,
+       panel = function (x, y, ...) {
+         panel.xyplot(x, y, ...)
+         panel.abline(h=a)
+         panel.abline(v=b)
+       }))
+#+END_R

+ 276 - 0
existing_tools/exp-blocks/testing.html

@@ -0,0 +1,276 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+lang="en" xml:lang="en">
+<head>
+<title>testing</title>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="generator" content="Org-mode"/>
+<meta name="generated" content="2009-02-05 15:41:29 PST"/>
+<meta name="author" content="Eric Schulte"/>
+<style type="text/css">
+ <!--/*--><![CDATA[/*><!--*/
+  html { font-family: Times, serif; font-size: 12pt; }
+  .title  { text-align: center; }
+  .todo   { color: red; }
+  .done   { color: green; }
+  .tag    { background-color:lightblue; font-weight:normal }
+  .target { }
+  .timestamp { color: grey }
+  .timestamp-kwd { color: CadetBlue }
+  p.verse { margin-left: 3% }
+  pre {
+	border: 1pt solid #AEBDCC;
+	background-color: #F3F5F7;
+	padding: 5pt;
+	font-family: courier, monospace;
+        font-size: 90%;
+        overflow:auto;
+  }
+  table { border-collapse: collapse; }
+  td, th { vertical-align: top; }
+  dt { font-weight: bold; }
+  div.figure { padding: 0.5em; }
+  div.figure p { text-align: center; }
+  .linenr { font-size:smaller }
+  .code-highlighted {background-color:#ffff00;}
+  .org-info-js_info-navigation { border-style:none; }
+  #org-info-js_console-label { font-size:10px; font-weight:bold;
+                               white-space:nowrap; }
+  .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
+                                 font-weight:bold; }
+  /*]]>*/-->
+</style>
+<script type="text/javascript">
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(null != target) {
+     elem.cacheClassElem = elem.className;
+     elem.cacheClassTarget = target.className;
+     target.className = "code-highlighted";
+     elem.className   = "code-highlighted";
+   }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(elem.cacheClassElem)
+     elem.className = elem.cacheClassElem;
+   if(elem.cacheClassTarget)
+     target.className = elem.cacheClassTarget;
+ }
+/*]]>*/-->
+</script>
+</head><body>
+<h1 class="title">testing</h1>
+
+
+<div id="table-of-contents">
+<h2>Table of Contents</h2>
+<div id="text-table-of-contents">
+<ul>
+<li><a href="#sec-1">1 Sweave and org-mode </a>
+<ul>
+<li><a href="#sec-1.1">1.1 Use the Sweave package for latex formatting </a></li>
+<li><a href="#sec-1.2">1.2 R blocks </a>
+<ul>
+<li><a href="#sec-1.2.1">1.2.1 R code that is not printed </a></li>
+<li><a href="#sec-1.2.2">1.2.2 R code that is printed </a></li>
+<li><a href="#sec-1.2.3">1.2.3 R code that references other blocks </a></li>
+</ul>
+</li>
+<li><a href="#sec-1.3">1.3 Inline references to R data </a>
+<ul>
+<li><a href="#sec-1.3.1">1.3.1 Used in text </a></li>
+<li><a href="#sec-1.3.2">1.3.2 Used in a table </a></li>
+</ul>
+</li>
+<li><a href="#sec-1.4">1.4 Single-line R commands </a></li>
+<li><a href="#sec-1.5">1.5 Graphics </a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+
+<div id="outline-container-1" class="outline-2">
+<h2 id="sec-1">1 Sweave and org-mode </h2>
+<div id="text-1">
+
+<p>If you're reading a PDF version of this document, you should also
+look at <a href="testing.Rorg">testing.Rorg</a> (the source file) and <a href="testing.html">testing.org</a> (the output
+of the Sweave process).
+</p>
+<p>
+Keep in mind that one of the advantages of a block-based approach is
+using \texttt{C-'} to edit code in its native mode.
+</p>
+
+</div>
+
+<div id="outline-container-1.1" class="outline-3">
+<h3 id="sec-1.1">1.1 Use the Sweave package for latex formatting </h3>
+<div id="text-1.1">
+
+<p>Org allows us to issue commands to be included in \{LaTeX} export.
+</p>
+</div>
+
+</div>
+
+<div id="outline-container-1.2" class="outline-3">
+<h3 id="sec-1.2">1.2 R blocks </h3>
+<div id="text-1.2">
+
+<p>The first argument to an R block when using Sweave is the label for
+that block.
+</p>
+<p>
+Not all R blocks are printed.  Sweave options allow the printing of
+the evaluated code, the output of the code, both, or neither.
+</p>
+
+</div>
+
+<div id="outline-container-1.2.1" class="outline-4">
+<h4 id="sec-1.2.1">1.2.1 R code that is not printed </h4>
+<div id="text-1.2.1">
+
+
+
+
+<div id="R-1">
+<pre>
+>    a <- 3
+>    b <- 6
+</pre>
+</div>
+
+</div>
+
+</div>
+
+<div id="outline-container-1.2.2" class="outline-4">
+<h4 id="sec-1.2.2">1.2.2 R code that is printed </h4>
+<div id="text-1.2.2">
+
+
+
+
+<div id="R-2">
+<pre>
+>    c <- 4
+</pre>
+</div>
+
+<p>
+We can use block labels to embed blocks by reference (even if they
+weren't printed before).
+</p></div>
+
+</div>
+
+<div id="outline-container-1.2.3" class="outline-4">
+<h4 id="sec-1.2.3">1.2.3 R code that references other blocks </h4>
+<div id="text-1.2.3">
+
+
+
+
+<div id="R-3">
+<pre>
+> #+R_CODEREF:  hidden_block
+> #+R_CODEREF:  visible_block
+>    a + b +c
+</pre>
+</div>
+
+</div>
+</div>
+
+</div>
+
+<div id="outline-container-1.3" class="outline-3">
+<h3 id="sec-1.3">1.3 Inline references to R data </h3>
+<div id="text-1.3">
+
+<p>We can evaluate R code inline.
+</p>
+</div>
+
+<div id="outline-container-1.3.1" class="outline-4">
+<h4 id="sec-1.3.1">1.3.1 Used in text </h4>
+<div id="text-1.3.1">
+
+<p>The value of <code>a</code> is 3.
+</p>
+</div>
+
+</div>
+
+<div id="outline-container-1.3.2" class="outline-4">
+<h4 id="sec-1.3.2">1.3.2 Used in a table </h4>
+<div id="text-1.3.2">
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+<col align="left"></col><col align="left"></col><col align="left"></col><col align="left"></col>
+<thead>
+<tr><th>a</th><th>b</th><th>c</th><th>TOTAL</th></tr>
+</thead>
+<tbody>
+<tr><td>3</td><td>6</td><td>4</td><td>13</td></tr>
+</tbody>
+</table>
+
+
+</div>
+</div>
+
+</div>
+
+<div id="outline-container-1.4" class="outline-3">
+<h3 id="sec-1.4">1.4 Single-line R commands </h3>
+<div id="text-1.4">
+
+<p>If we want a line of R code to be evaluated but not printed,
+there's a convenient shorthand.  This only works for single lines
+of R code, but you can have more than one in a row.
+</p>
+</div>
+
+</div>
+
+<div id="outline-container-1.5" class="outline-3">
+<h3 id="sec-1.5">1.5 Graphics </h3>
+<div id="text-1.5">
+
+<p>We use values defined elsewhere in the buffer to produce this
+graph.  The new CAPTION and LABEL arguments work just fine.
+</p>
+
+
+
+<div id="R-4">
+<pre>
+> print(xyplot(speed ~ dist, cars,
+>        panel = function (x, y, ...) {
+>          panel.xyplot(x, y, ...)
+>          panel.abline(h=a)
+>          panel.abline(v=b)
+>        }))
+</pre>
+</div>
+<p>
+<a href="e.eps">file:e.eps</a>
+</p></div>
+</div>
+</div>
+<div id="postamble"><p class="author"> Author: Eric Schulte
+<a href="mailto:schulte.eric@gmail.com">&lt;schulte.eric@gmail.com&gt;</a>
+</p>
+<p class="date"> Date: 2009-02-05 15:41:29 PST</p>
+<p>HTML generated by org-mode 6.20f in emacs 23</p>
+</div></body>
+</html>