emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carsten Dominik <carsten.dominik@gmail.com>
To: Eric Schulte <schulte.eric@gmail.com>
Cc: Emacs-orgmode@gnu.org
Subject: Re: a better way with babel
Date: Thu, 1 Jul 2010 15:39:19 +0200	[thread overview]
Message-ID: <37DDFB4A-96C2-4C01-849A-7BE5D904A5A0@gmail.com> (raw)
In-Reply-To: <87wrts734p.fsf@gmail.com>

Hi Eric,

I tried to apply the patch, but it does not apply cleanly, maybe due  
to other changes.  Can I ask you to update and resubmit?

Thanks!

- Carsten

On Jun 21, 2010, at 6:37 PM, Eric Schulte wrote:

> Hi Robert,
>
> Thanks for the thoughtful message.
>
> I present a couple of solutions below.
>
> Robert Cunningham <robut@iinet.net.au> writes:
>
>> G'day All,
>>
>> I wonder if I've missed something and there is a better way.
>>
>> Essentially I'm trying to use org babel with R and LaTeX to create  
>> figures
>> with both long and short captions (for contents)
>>
>> I'd started with:
>>
>> #+CAPTION: Nice data (filled points indicate less nice data)
>> #+LABEL:   fig:nicedata
>> #+ATTR_LaTeX: width=0.98\textwidth
>> #+begin_src R :file ndata.pdf :width 1000 :height 617 :exports  
>> results
>>  dotchart(data$ndata)
>> #+end_src
>>
>> which pointed to the need for long/short captions...
>>
>> feeling hopeful I tried:
>>
>> #+CAPTION: Nice data [Nice data (filled points indicate less nice  
>> data)]
>> #+LABEL:   fig:nicedata
>> #+ATTR_LaTeX: width=0.98\textwidth
>> #+begin_src R :file ndata.pdf :width 1000 :height 617 :exports  
>> results
>>  dotchart(data$ndata)
>> #+end_src
>>
>
> I'm attaching a patch [1] which adds shortname support for  
> captions.  Once
> applied, the following syntax will result in a caption with a  
> shortname
> and a longname.
>
> --8<---------------cut here---------------start------------->8---
> some pre-table text
>
> #+source: g-nicedata
> #+begin_src gnuplot :file graph.png :exports results
>  plot sin(x)
> #+end_src
>
> #+Caption: [nice data]{a longer description of the niceness of the  
> data}
> #+results: g-nicedata
> [[file:graph.png]]
>
> some post-table text
> --8<---------------cut here---------------end--------------->8---
>
> however, while this patch is still pending there is an Org-babel
> solution below which should work immediately.
>
>>
>>
>> but no luck there.
>>
>> Next effort was to try to use R and LaTex more directly with noweb.  
>> I tried
>> this:
>>
>>
>>
>> #+srcname: r-nicedata
>> #+begin_src R :session :file ndata.pdf :results output :exports  
>> results
>>  dotchart(data$ndata)	
>> #+end_src
>>
>>
>> #+begin_src latex :noweb yes
>>  \begin{figure}[htb!]
>>    \centering
>>    \includegraphics[width=0.98\textwidth]{<<r-nicedata()>>}
>>    \caption[Nice data]{Nice data (filled points indicate less nice  
>> data)}
>>    \label{fig:nicedata}
>>  \end{figure}
>> #+end_src
>>
>>
>>
>> This does produce the figure and long/short contents BUT ALSO  
>> produces this:
>>
>> #+results: r-nicedata
>> [[file:ndata.pdf]]
>>
>> which upon export results in a link and consequently the plot  
>> appearing both
>> in the figure and elsewhere. This second plot is unwelcome.
>>
>> I've tried assorted :results and :output options but have not found  
>> how to
>> suppress the #+results: but still obtain the figure. I've always used
>> the :session option.
>>
>> I've also tried twigging an org-export option to suppress pdf  
>> export but the
>> link is still exported so that is not a solution.
>>
>> The current "working" solution is to use the noweb approach and  
>> then use sed
>> to clean out the links to the second image-ugly to say the least!
>>
>
> You were very close with the noweb approach.  The following  
> combination
> should work -- notice the ":results silent" header argument to the
> source block.
>
> --8<---------------cut here---------------start------------->8---
> some pre-table text
>
> #+source: g-nicedata
> #+begin_src gnuplot :file graph.png :results silent :exports none
>  plot sin(x)
> #+end_src
>
> #+begin_src latex :noweb yes
>  \begin{figure}[htb!]
>    \centering
>    \includegraphics[width=0.98\textwidth]{<<g-nicedata()>>}
>    \caption[Nice data]{some nice data -- filled points indicate less  
> nice data}
>    \label{fig:nicedata}
>  \end{figure}
> #+end_src
>
> some post-table text
> --8<---------------cut here---------------end--------------->8---
>
> is exported to the following latex,
>
> --8<---------------cut here---------------start------------->8---
> some pre-table text
>
>
>
> \begin{figure}[htb!]
>  \centering
>  \includegraphics[width=0.98\textwidth]{graph.png}
>  \caption[Nice data]{some nice data -- filled points indicate less  
> nice data}
>  \label{fig:nicedata}
> \end{figure}
>
> some post-table text
> --8<---------------cut here---------------end--------------->8---
>
> Hope this helps,
>
> Best -- Eric
>
>>
>>
>>
>> All this with org version 6.36c
>>
>>
>> What have I missed? What is the best way to do this?
>>
>>
>> Cheers,
>>
>> Robert Cunningham
>>
>>
>>
>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
> Footnotes:
> [1]  From 6a55dcab99bbd7840117b8390ab5db347d2573ef Mon Sep 17  
> 00:00:00 2001
> From: Eric Schulte <schulte.eric@gmail.com>
> Date: Mon, 21 Jun 2010 09:02:37 -0700
> Subject: [PATCH] add short-names to #+captions with support for  
> latex export
>
>  captions specified with the following syntax
>    #+CAPTION: [shortname]{longname}
>  will have their short and longnames handled appropriately.
>
>  Thanks to Robert Cunningham for suggesting this feature.
>
> * lisp/org-exp.el (org-export-attach-captions-and-attributes): adding
>  a shortname attribute to caption strings under the symbol name
>  org-caption-shortn.
>
> * lisp/org-latex.el (org-export-latex-tables): handling caption short
>  names on table export
>
>  (org-export-latex-convert-table.el-table): handling caption short
>  names on table.el type table export
>
>  (org-export-latex-links): handling caption short names on link/image
>  export
>
>  (org-export-latex-format-image): now takes an optional argument
>  specifying a caption short name
> ---
> lisp/org-exp.el   |   14 +++++++++-----
> lisp/org-latex.el |   21 ++++++++++++++-------
> 2 files changed, 23 insertions(+), 12 deletions(-)
>
> diff --git a/lisp/org-exp.el b/lisp/org-exp.el
> index 029e4d7..466d7da 100644
> --- a/lisp/org-exp.el
> +++ b/lisp/org-exp.el
> @@ -1256,7 +1256,7 @@ the current file."
>   (goto-char (point-min))
>   (while (re-search-forward org-bracket-link-regexp nil t)
>     (org-if-unprotected-at (1+ (match-beginning 0))
> -     (let* ((md (match-data))
> +      (let* ((md (match-data))
> 	    (desc (match-end 2))
> 	    (link (org-link-unescape (match-string 1)))
> 	    (slink (org-solidify-link-text link))
> @@ -1381,8 +1381,8 @@ removed as well."
> 					   select-tags "\\|")
> 			 "\\):"))
> 	 (re-excl (concat ":\\(" (mapconcat 'regexp-quote
> -					   exclude-tags "\\|")
> -			"\\):"))
> +					    exclude-tags "\\|")
> +			  "\\):"))
> 	 beg end cont)
>     (goto-char (point-min))
>     (when (and select-tags
> @@ -1593,11 +1593,14 @@ table line.  If it is a link, add it to the  
> line containing the link."
> 		    "^[ \t]*\\(|[^-]\\)"
> 		    "\\|"
> 		    "^[ \t]*\\[\\[.*\\]\\][ \t]*$"))
> -	cap attr label end)
> +	cap shortn attr label end)
>     (while (re-search-forward re nil t)
>       (cond
>        ((match-end 1)
> -	(setq cap (concat cap (if cap " " "") (org-trim (match-string 1)))))
> +	(setq cap (concat cap (if cap " " "") (org-trim (match-string 1))))
> +	(when (string-match "\\[\\(.*\\)\\]{\\(.*\\)}" cap)
> +	  (setq shortn (match-string 1 cap)
> +		cap (match-string 2 cap))))
>        ((match-end 2)
> 	(setq attr (concat attr (if attr " " "") (org-trim (match-string  
> 2)))))
>        ((match-end 3)
> @@ -1609,6 +1612,7 @@ table line.  If it is a link, add it to the  
> line containing the link."
> 		    (point-at-eol)))
> 	(add-text-properties (point-at-bol) end
> 			     (list 'org-caption cap
> +				   'org-caption-shortn shortn
> 				   'org-attributes attr
> 				   'org-label label))
> 	(if label (push (cons label label) target-alist))
> diff --git a/lisp/org-latex.el b/lisp/org-latex.el
> index 01a4b05..6c2aab2 100644
> --- a/lisp/org-latex.el
> +++ b/lisp/org-latex.el
> @@ -1576,7 +1576,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
>              (org-table-last-column-widths (copy-sequence
>                                             org-table-last-column- 
> widths))
>              fnum fields line lines olines gr colgropen line-fmt align
> -             caption label attr floatp longtblp)
> +             caption shortn label attr floatp longtblp)
>         (if org-export-latex-tables-verbatim
>             (let* ((tbl (concat "\\begin{verbatim}\n" raw-table
>                                 "\\end{verbatim}\n")))
> @@ -1585,6 +1585,8 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
>           (progn
>             (setq caption (org-find-text-property-in-string
>                            'org-caption raw-table)
> +		  shortn (org-find-text-property-in-string
> +			  'org-caption-shortn raw-table)
>                   attr (org-find-text-property-in-string
>                         'org-attributes raw-table)
>                   label (org-find-text-property-in-string
> @@ -1652,7 +1654,8 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
>                           (if floatp "\\begin{table}[htb]\n"))
>                         (if floatp
>                             (format
> -                             "\\caption{%s%s}"
> +                             "\\caption%s{%s%s}"
> +			     (if shortn (concat "[" shortn "]") "")
>                              (if label (concat "\\\label{" label  
> "}") "")
>                              (or caption "")))
>                         (if (and longtblp caption) "\\\\\n" "\n")
> @@ -1680,10 +1683,11 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
>
> (defun org-export-latex-convert-table.el-table ()
>   "Replace table.el table at point with LaTeX code."
> -  (let (tbl caption label line floatp attr align rmlines)
> +  (let (tbl caption shortn label line floatp attr align rmlines)
>     (setq line (buffer-substring (point-at-bol) (point-at-eol))
> 	  label (org-get-text-property-any 0 'org-label line)
> 	  caption (org-get-text-property-any 0 'org-caption line)
> +	  shortn (org-get-text-property-any 0 'org-caption-shortn line)
> 	  attr (org-get-text-property-any 0 'org-attributes line)
> 	  align (and attr (stringp attr)
> 		     (string-match "\\<align=\\([^ \t\n\r,]+\\)" attr)
> @@ -1721,7 +1725,8 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
>       (setq tbl (concat "\\begin{center}\n" tbl "\\end{center}")))
>     (when floatp
>       (setq tbl (concat "\\begin{table}\n"
> -			(format "\\caption{%s%s}\n"
> +			(format "\\caption%s{%s%s}\n"
> +				(if shortn (format "[%s]" shortn) "")
> 				(if label (format "\\label{%s}" label) "")
> 				(or caption ""))
> 			tbl
> @@ -1822,6 +1827,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
> 			  "file")))
> 	    (coderefp (equal type "coderef"))
> 	    (caption (org-find-text-property-in-string 'org-caption raw- 
> path))
> +	    (shortn (org-find-text-property-in-string 'org-caption-shortn  
> raw-path))
> 	    (attr (or (org-find-text-property-in-string 'org-attributes raw- 
> path)
> 		      (plist-get org-export-latex-options-plist :latex-image- 
> options)))
> 	    (label (org-find-text-property-in-string 'org-label raw-path))
> @@ -1859,7 +1865,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
> 		   (plist-get org-export-latex-options-plist :inline-images))
> 	      ;; OK, we need to inline an image
> 	      (insert
> -	       (org-export-latex-format-image raw-path caption label attr)))
> +	       (org-export-latex-format-image raw-path caption label attr  
> shortn)))
> 	     (coderefp
> 	      (insert (format
> 		       (org-export-get-coderef-format path desc)
> @@ -1889,7 +1895,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
> 	     (t (insert "\\texttt{" desc "}")))))))
>
>
> -(defun org-export-latex-format-image (path caption label attr)
> +(defun org-export-latex-format-image (path caption label attr  
> &optional shortn)
>   "Format the image element, depending on user settings."
>   (let (ind floatp wrapp multicolumnp placement figenv)
>     (setq floatp (or caption label))
> @@ -1932,7 +1938,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
> 	   (floatp "\\begin{figure}%placement
> \\centering
> \\includegraphics[%attr]{%path}
> -\\caption{%labelcmd%caption}
> +\\caption%shortn{%labelcmd%caption}
> \\end{figure}")
> 	   (t "\\includegraphics[%attr]{%path}")))
>
> @@ -1953,6 +1959,7 @@ The conversion is made depending of STRING- 
> BEFORE and STRING-AFTER."
> 			 (expand-file-name path)
> 		       path))
> 	       (cons "attr" attr)
> +	       (cons "shortn" (if shortn (format "[%s]" shortn) ""))
> 	       (cons "labelcmd" (if label (format "\\label{%s}"
> 						  label)""))
> 	       (cons "caption" (or caption ""))
> -- 
> 1.7.0.4
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

- Carsten

  reply	other threads:[~2010-07-01 13:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-21 10:03 a better way with babel Robert Cunningham
2010-06-21 16:00 ` Erik Iverson
2010-06-21 16:12 ` Thomas S. Dye
2010-06-21 16:37 ` Eric Schulte
2010-07-01 13:39   ` Carsten Dominik [this message]
2010-07-01 15:19     ` Eric Schulte

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=37DDFB4A-96C2-4C01-849A-7BE5D904A5A0@gmail.com \
    --to=carsten.dominik@gmail.com \
    --cc=Emacs-orgmode@gnu.org \
    --cc=schulte.eric@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).