emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Chris Kauffman <kauffman@cs.umn.edu>
To: Carsten Dominik <carsten.dominik@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Property inheritance in beamer export [7.4]
Date: Mon, 14 Nov 2011 10:51:47 -0600	[thread overview]
Message-ID: <CAKj7sHF6pxJ+_g5xqT5-67Y4Q5TH3CdmmBTRhKb88OMuU+dxTw@mail.gmail.com> (raw)
In-Reply-To: <1CD72022-E05E-477E-8AF0-F569AE3F5FFA@gmail.com>

Hi Carsten

On Fri, Nov 11, 2011 at 10:58 AM, Carsten Dominik
<carsten.dominik@gmail.com> wrote:
> Hi Chris,
>
> On 11.11.2011, at 05:34, Chris Kauffman wrote:
>
>>
>> I use org for constructing simple slide presentations quite a
>> bit.  I'd like to be able to set a global property which shrinks
>> all text to fit in the allotted space; this is great for source
>> examples.
>
> Have you read the beamer documentation?  After reading about
> shrink, do you still mean to apply this evil thing?   :)
>

For some situations, it is very appropriate, such as including a full
code example in a single slide for copying/pasting into an editor.
This keeps the code with the presentation and alleviates the need to
copy from multiple slides or go to a separate site for the code.

In general, I find it peculiar that anyone would include documentation
to the effect "never use this option." The point of including
functionality is to enable use in situations the writer can't
anticipate.  If the option is truly evil, remove it from the codebase
altogether.  I have found it incredibly useful and will continue
ignoring such requests.

>> After some experimentation I put
>>
>> #+PROPERTY: BEAMER_envargs [shrink]
>>
>> in the preamble and evaluated
>>
>> (set-variable (quote org-use-property-inheritance) t nil)
>>
>> According to my understanding of the documentation, this should
>> make very outline entry inherit the property BEAMER_envargs,
>> regardless of whether it has a properties list itself.
>
> Yes, I agree this is what the documentation looks like.  However, the
> imlementation of org-beamer.el only looks at the local properties.
> TO speed up processing, Org grabs all properties at each headline
> and stores them - without inheritance.
>

A small note in the documentation to that effect might prevent
confusion from folks like me.

The patch you gave below in combination with the elisp code works.  I
will continue using this patched version.  Please consider including
such functionality in a future org-mode release as, despite the hit in
efficiency, I feel allowing globally inherited properties as a mode of
operation would eliminate a lot of tedium in copying properties over
manually.

Cheers,
Chris

>> After
>> reloading the file, internally this seems to work fine: I move to
>> any heading and eval the following lisp
>>
>> (org-entry-get (point) "BEAMER_envargs" 1)
>>
>> which gives the result "[shrink]".
>>
>> However, on exporting the org file to pdf, the shrinking does not
>> seem to happen. The source code runs off the page. Is property
>> inheritance not respected during export?
>
> Could you please set in .emacs
>
> (setq org-beamer-inherited-properties '("BEAMER_envargs"))
>
> and then try the following experimental patch
>
> -----------------------------------------------------------------------------------------
> diff --git a/lisp/org-beamer.el b/lisp/org-beamer.el
> index 118aa75..2208c60 100644
> --- a/lisp/org-beamer.el
> +++ b/lisp/org-beamer.el
> @@ -482,4 +482,10 @@ The effect is that these values will be accessible during export."
>                    (looking-at ".*?:B_\\(note\\(NH\\)?\\):"))
>               (push (cons "BEAMER_env" (match-string 1)) props))
> +          (when (org-bound-and-true-p org-beamer-inherited-properties)
> +            (mapc (lambda (p)
> +                    (unless (assoc p props)
> +                      (let ((v (org-entry-get nil p 'inherit)))
> +                        (and v (push (cons p v) props)))))
> +                  org-beamer-inherited-properties))
>           (put-text-property (point-at-bol) (point-at-eol) 'org-props props)))
>       (setq org-export-latex-options-plist
> -----------------------------------------------------------------------------------------
>
> - Carsten
>
>>
>> Cheers,
>> Chris
>>
>> --Example .org File---
>> #+TITLE:     Java Lecture
>> #+AUTHOR:    Christopher Kauffman
>> #+EMAIL:     kauffman77@gmail.com
>> #+LANGUAGE:  en
>> #+OPTIONS:   H:3 num:t toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
>> #+OPTIONS:   TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
>> #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0
>> path:http://orgmode.org/org-info.js
>> #+EXPORT_SELECT_TAGS: export
>> #+EXPORT_EXCLUDE_TAGS: noexport
>> #+STARTUP: beamer
>> #+STARTUP: showall
>> #+LaTeX_CLASS: beamer
>> #+BEAMER_FRAME_LEVEL: 1
>> #+PROPERTY: BEAMER_envargs [shrink]
>>
>> * Example
>> Want this shrink
>> #+BEGIN_SRC java
>> public class Mouse{
>>   private int age = 0;              // age of mouse in days
>>   private double weight = 1.0;      // weight of mouse in grams
>>   private double percentGrowthRate; // % weight increase per day
>>
>>   // This method assigns the mouse's percent growth rate.
>>   public void setPercentGrowthRate(double percentGrowthRate) {
>>     this.percentGrowthRate = percentGrowthRate;
>>   }
>>
>>   // This method simulates one day of growth for the mouse.
>>   public void grow() {
>>     this.weight += (.01 * this.percentGrowthRate * this.weight);
>>     this.age++;
>>   }
>>
>>   // This method prints the mouses's age and weight.
>>   public void display() {
>>     System.out.printf(
>>       "Age = %d, weight = %.3f\n", this.age, this.weight);
>>   }
>> }
>> #+END_SRC
>>
>> * Example
>> :PROPERTIES:
>> :BEAMER_envargs: [shrink]
>> :END:
>>
>> Must add properties every time
>> #+BEGIN_SRC java
>> public class Mouse{
>>   private int age = 0;              // age of mouse in days
>>   private double weight = 1.0;      // weight of mouse in grams
>>   private double percentGrowthRate; // % weight increase per day
>>
>>   // This method assigns the mouse's percent growth rate.
>>   public void setPercentGrowthRate(double percentGrowthRate) {
>>     this.percentGrowthRate = percentGrowthRate;
>>   }
>>
>>   // This method simulates one day of growth for the mouse.
>>   public void grow() {
>>     this.weight += (.01 * this.percentGrowthRate * this.weight);
>>     this.age++;
>>   }
>>
>>   // This method prints the mouses's age and weight.
>>   public void display() {
>>     System.out.printf(
>>       "Age = %d, weight = %.3f\n", this.age, this.weight);
>>   }
>> }
>> #+END_SRC
>>
>> --END EXAMPLE-
>>
>> current state:
>> ==============
>> (setq org-export-latex-after-initial-vars-hook
>> '(org-beamer-after-initial-vars) org-speed-command-hook
>> '(org-speed-command-default-hook org-babel-speed-command-hook)
>> org-agenda-files '("~/mypubs/worklog") org-agenda-window-setup
>> 'other-window org-metaup-hook '(org-babel-load-in-session-maybe)
>> org-after-todo-state-change-hook '(org-clock-out-if-current)
>> org-export-blocks-postblock-hook '(org-exp-res/src-name-cleanup)
>> org-export-latex-format-toc-function
>> 'org-export-latex-format-toc-default org-tab-first-hook
>> '(org-hide-block-toggle-maybe org-src-native-tab-command-maybe
>> org-babel-hide-result-toggle-maybe) org-src-mode-hook
>> '(org-src-babel-configure-edit-buffer
>> org-src-mode-configure-edit-buffer)
>> org-confirm-shell-link-function 'yes-or-no-p
>> org-export-first-hook '(org-beamer-initialize-open-trackers)
>> org-agenda-before-write-hook '(org-agenda-add-entry-text)
>> outline-mode-hook '((lambda nil
>>                     (local-set-key "\356" (quote
>>                     outline-next-visible-heading))
>>                     (local-set-key "\360" (quote
>>                     outline-previous-visible-heading))
>>                     (local-set-key (quote [f12]) (quote
>>                    ck-outline-toggle))) )
>>                    org-babel-pre-tangle-hook '(save-buffer)
>>                    org-cycle-hook
>>                    '(org-cycle-hide-archived-subtrees
>>                    org-cycle-hide-drawers
>>                    org-cycle-show-empty-lines
>>                    org-optimize-window-after-visibility-change)
>>                    org-export-preprocess-before-normalizing-links-hook
>>                    '(org-remove-file-link-modifiers)
>>                    org-mode-hook '((lambda
>>                    nil (local-set-key " d" (quote
>>                    insert-date-heading))
>>                 (local-set-key "  " (quote org-agenda))
>>                 (local-set-key "\232" (quote format-float-column))
>>                 (local-set-key " e" (quote org-example))
>>                 (local-set-key " v" (quote org-verbatim))
>>                 (local-set-key " q" (quote org-quote)) (auto-fill-mode 1)
>>                 (setq org-agenda-window-setup (quote
>>                other-window)))
>>                #[nil "\300\301\302\303\304$\207" [org-add-hook
>>                change-major-mode-hook org-show-block-all append
>>                local] 5] #[nil "\300\301\302\303\304$\207"
>>                [org-add-hook change-major-mode-hook
>>                org-babel-show-result-all append local] 5]
>>                org-babel-result-hide-spec
>>                org-babel-hide-all-hashes)
>>                org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point
>>                org-babel-execute-safely-maybe)
>>                org-confirm-elisp-link-function 'yes-or-no-p
>>                org-export-interblocks '((lob
>>                org-babel-exp-lob-one-liners)
>>                         (src org-babel-exp-inline-src-blocks))
>> org-occur-hook '(org-first-headline-recenter)
>> org-from-is-user-regexp "\\<kauffman\\>"
>> org-export-preprocess-before-selecting-backend-code-hook
>> '(org-beamer-select-beamer-code) org-export-latex-final-hook
>> '(org-beamer-amend-header org-beamer-fix-toc
>> org-beamer-auto-fragile-frames
>> org-beamer-place-default-actions-for-lists) org-metadown-hook
>> '(org-babel-pop-to-session-maybe) org-export-blocks '((src
>> org-babel-exp-src-blocks nil)
>>                    (comment org-export-blocks-format-comment t)
>>                    (ditaa org-export-blocks-format-ditaa nil)
>>                    (dot org-export-blocks-format-dot nil))
>> )
>>
>>
>>
>
>



-- 
Karypis Research Group
Dept. of Computer Science
University of Minnesota

  reply	other threads:[~2011-11-14 16:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-11  4:34 Property inheritance in beamer export [7.4] Chris Kauffman
2011-11-11 16:58 ` Carsten Dominik
2011-11-14 16:51   ` Chris Kauffman [this message]
2012-04-22 14:37     ` Carsten Dominik

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=CAKj7sHF6pxJ+_g5xqT5-67Y4Q5TH3CdmmBTRhKb88OMuU+dxTw@mail.gmail.com \
    --to=kauffman@cs.umn.edu \
    --cc=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /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).