emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* using a simple numerical variable in an org text ocument
@ 2013-07-25 21:36 Matt Price
  2013-07-25 21:55 ` Thorsten Jolitz
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Matt Price @ 2013-07-25 21:36 UTC (permalink / raw)
  To: Org Mode

Hi,

I'm making a very simple org-document -- a packing list for a trip.
It has entries like

- 4 mugs
- for sleeping bags
- 4 thermarest pads


I'd like to replace the numbers there by a variable -- so if I make a
list for 4 people, the number displayed will be '4'; but if the list
is for 2 people, the number displayed will be 2.  Better would be if I
could also do simple arithmetic manipulations (x * 6 dinners for a
week...).  I there a really simple way to do this? if it's not really
easy, it won't really seem worth it, but if it is really easy, I will
use it a lot...

Thanks guys!
Matt

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-25 21:36 using a simple numerical variable in an org text ocument Matt Price
@ 2013-07-25 21:55 ` Thorsten Jolitz
  2013-07-25 23:39 ` Thorsten Jolitz
  2013-07-26  7:43 ` Sebastien Vauban
  2 siblings, 0 replies; 7+ messages in thread
From: Thorsten Jolitz @ 2013-07-25 21:55 UTC (permalink / raw)
  To: emacs-orgmode

Matt Price <moptop99@gmail.com> writes:

> Hi,
>
> I'm making a very simple org-document -- a packing list for a trip.
> It has entries like
>
> - 4 mugs
> - for sleeping bags
> - 4 thermarest pads
>
>
> I'd like to replace the numbers there by a variable -- so if I make a
> list for 4 people, the number displayed will be '4'; but if the list
> is for 2 people, the number displayed will be 2.  Better would be if I
> could also do simple arithmetic manipulations (x * 6 dinners for a
> week...).  I there a really simple way to do this? if it's not really
> easy, it won't really seem worth it, but if it is really easy, I will
> use it a lot...


Use a table with a named reference, e.g. stored as subtree property. See
[[http://orgmode.org/org.html#The-spreadsheet][Spreadsheets]].

,--------------------------------
| * My Trip
|   :PROPERTIES:
|   :people:   4
|   :END:
|
| | item       | factor | total |
| |------------+--------+-------|
| | toothbrush |      1 |     4 |
| | socks      |      4 |    16 |
| #+TBLFM: $3=$2*$PROP_people
`--------------------------------

--
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-25 21:36 using a simple numerical variable in an org text ocument Matt Price
  2013-07-25 21:55 ` Thorsten Jolitz
@ 2013-07-25 23:39 ` Thorsten Jolitz
  2013-07-26  1:16   ` Jonathan Leech-Pepin
  2013-07-26  7:43 ` Sebastien Vauban
  2 siblings, 1 reply; 7+ messages in thread
From: Thorsten Jolitz @ 2013-07-25 23:39 UTC (permalink / raw)
  To: emacs-orgmode

Matt Price <moptop99@gmail.com> writes:

> Hi,
>
> I'm making a very simple org-document -- a packing list for a trip.
> It has entries like
>
> - 4 mugs
> - for sleeping bags
> - 4 thermarest pads
>
>
> I'd like to replace the numbers there by a variable -- so if I make a
> list for 4 people, the number displayed will be '4'; but if the list
> is for 2 people, the number displayed will be 2.  Better would be if I
> could also do simple arithmetic manipulations (x * 6 dinners for a
> week...).  I there a really simple way to do this? if it's not really
> easy, it won't really seem worth it, but if it is really easy, I will
> use it a lot...

Or, if you insist on checkboxes (private conversation), you might put this
function in your .emacs and run it to replace all numbers (that are either
factors or totals) with num * people (when people >= 0) or with num / people
(when people > 0).

#+begin_src emacs-lisp
  (defun tj/calc-total-items (people)
    "Replace factor cookies with factor * people totals."
    (interactive "NPeople: ")
    (save-excursion
      (save-restriction
        (save-match-data
          (goto-char (point-min))
          (widen)
          (while (not (eobp))
            (and (org-at-item-checkbox-p)
                 (looking-at
                  (concat
                   "\\(^[[:space:]]*-[[:space:]]"
                   "\\[[-X\s]\\][[:space:]]\\)"
                   "\\([[:digit:]]+\\)\\([[:space:]]+\\)"))
                 (let* ((num
                         (string-to-number
                          (match-string-no-properties 2)))
                        (total
                         (if (>= people 0)
                             (* num people)
                           (/ num (abs people)))))
                   (replace-match
                    (format "%s" total) nil nil nil 2)))
            (forward-line))))))
#+end_src

#+results:
: tj/calc-total-items


Use either as 

,----------------------------------
| M-x tj/calc-total-items RET 7 RET
`----------------------------------

or 

,----------------------------------
| C-7 M-x tj/calc-total-items RET
`----------------------------------

in your org-buffer.

When there are e.g. 7 people, this checkbox list 

- [ ] 1 toothbrushes
- [ ] 4 socks

turns into 

- [ ] 7 toothbrushes
- [ ] 28 socks

after applying the above command in this buffer, and the change is
reversed when applying

,----------------------------------
| M-x tj/calc-total-items RET -7 RET
`----------------------------------

or 

,----------------------------------
| C--7 M-x tj/calc-total-items RET
`----------------------------------

afterwards. Note that you must stick to the format 

,--------------------------
| - [ ] <<digit>> text ....
`--------------------------

for this to work.

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-25 23:39 ` Thorsten Jolitz
@ 2013-07-26  1:16   ` Jonathan Leech-Pepin
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Leech-Pepin @ 2013-07-26  1:16 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Hi,

Thorsten Jolitz writes:

> Matt Price <moptop99@gmail.com> writes:
>
>> Hi,
>>
>> I'm making a very simple org-document -- a packing list for a trip.
>> It has entries like
>>
>> - 4 mugs
>> - for sleeping bags
>> - 4 thermarest pads
>>
>>
>> I'd like to replace the numbers there by a variable -- so if I make a
>> list for 4 people, the number displayed will be '4'; but if the list
>> is for 2 people, the number displayed will be 2.  Better would be if I
>> could also do simple arithmetic manipulations (x * 6 dinners for a
>> week...).  I there a really simple way to do this? if it's not really
>> easy, it won't really seem worth it, but if it is really easy, I will
>> use it a lot...
>
> Or, if you insist on checkboxes (private conversation), you might put this
> function in your .emacs and run it to replace all numbers (that are either
> factors or totals) with num * people (when people >= 0) or with num / people
> (when people > 0).
>

If you want to use checkboxes, couldn't you use a babel code block and
then =call= it on each entry?

#+begin_src org
  ,#+MACRO: count call_Sample(x=$1)[:results raw]
  
  ,* Test
  :PROPERTIES:
  :var:      people=5
  :END:
  
  - [ ] call_Sample(x=2)[:results raw] socks
  - [ ] call_Sample(x=1)[:results raw] toothbrushes
  - [ ] {{{count(3)}}} shoes
    
  ,#+name: Sample
  ,#+header: :var x=1 :results raw
  ,#+begin_src emacs-lisp
    (* x people)
  ,#+end_src
  
  ,#+RESULTS: Sample
  5
#+end_src

You can then wrap it in a macro to avoid having to write out quite as
much per line (as the last entry demonstrates.

Then just adjust the value of the =:var:= property to match how many
people, and your export will provide the correct values


> #+begin_src emacs-lisp
>   (defun tj/calc-total-items (people)
>     "Replace factor cookies with factor * people totals."
>     (interactive "NPeople: ")
>     (save-excursion
>       (save-restriction
>         (save-match-data
>           (goto-char (point-min))
>           (widen)
>           (while (not (eobp))
>             (and (org-at-item-checkbox-p)
>                  (looking-at
>                   (concat
>                    "\\(^[[:space:]]*-[[:space:]]"
>                    "\\[[-X\s]\\][[:space:]]\\)"
>                    "\\([[:digit:]]+\\)\\([[:space:]]+\\)"))
>                  (let* ((num
>                          (string-to-number
>                           (match-string-no-properties 2)))
>                         (total
>                          (if (>= people 0)
>                              (* num people)
>                            (/ num (abs people)))))
>                    (replace-match
>                     (format "%s" total) nil nil nil 2)))
>             (forward-line))))))
> #+end_src
>
> #+results:
> : tj/calc-total-items
>
>
> Use either as 
>
> ,----------------------------------
> | M-x tj/calc-total-items RET 7 RET
> `----------------------------------
>
> or 
>
> ,----------------------------------
> | C-7 M-x tj/calc-total-items RET
> `----------------------------------
>
> in your org-buffer.
>
> When there are e.g. 7 people, this checkbox list 
>
> - [ ] 1 toothbrushes
> - [ ] 4 socks
>
> turns into 
>
> - [ ] 7 toothbrushes
> - [ ] 28 socks
>
> after applying the above command in this buffer, and the change is
> reversed when applying
>
> ,----------------------------------
> | M-x tj/calc-total-items RET -7 RET
> `----------------------------------
>
> or 
>
> ,----------------------------------
> | C--7 M-x tj/calc-total-items RET
> `----------------------------------
>
> afterwards. Note that you must stick to the format 
>
> ,--------------------------
> | - [ ] <<digit>> text ....
> `--------------------------
>
> for this to work.

Regards,

--
Jonathan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-25 21:36 using a simple numerical variable in an org text ocument Matt Price
  2013-07-25 21:55 ` Thorsten Jolitz
  2013-07-25 23:39 ` Thorsten Jolitz
@ 2013-07-26  7:43 ` Sebastien Vauban
  2013-07-27 18:19   ` Dieter Wilhelm
  2 siblings, 1 reply; 7+ messages in thread
From: Sebastien Vauban @ 2013-07-26  7:43 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Matt Price wrote:
> I'm making a very simple org-document -- a packing list for a trip.
> It has entries like
>
> - 4 mugs
> - for sleeping bags
> - 4 thermarest pads
>
>
> I'd like to replace the numbers there by a variable -- so if I make a
> list for 4 people, the number displayed will be '4'; but if the list
> is for 2 people, the number displayed will be 2.  Better would be if I
> could also do simple arithmetic manipulations (x * 6 dinners for a
> week...).  I there a really simple way to do this? if it's not really
> easy, it won't really seem worth it, but if it is really easy, I will
> use it a lot...

As macros are expanded before Babel code is evaluated, I would
try #+scr_calc{...} with MACRO constants in the formula (untested).

Best regards,
  Seb

-- 
Sebastien Vauban

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-26  7:43 ` Sebastien Vauban
@ 2013-07-27 18:19   ` Dieter Wilhelm
  2013-08-14  5:54     ` Sebastien Vauban
  0 siblings, 1 reply; 7+ messages in thread
From: Dieter Wilhelm @ 2013-07-27 18:19 UTC (permalink / raw)
  To: Sebastien Vauban; +Cc: emacs-orgmode

"Sebastien Vauban" <sva-news@mygooglest.com> writes:

> Matt Price wrote:
>> I'm making a very simple org-document -- a packing list for a trip.
>> It has entries like
>> - 4 mugs
>> - for sleeping bags
>> - 4 thermarest pads
>> I'd like to replace the numbers there by a variable -- so if I make a
>> list for 4 people, the number displayed will be '4'; but if the list
>> is for 2 people, the number displayed will be 2.  Better would be if I
>> could also do simple arithmetic manipulations (x * 6 dinners for a
>> week...).  I there a really simple way to do this? if it's not really
>> easy, it won't really seem worth it, but if it is really easy, I will
>> use it a lot...
> As macros are expanded before Babel code is evaluated, I would
> try #+scr_calc{...} with MACRO constants in the formula (untested).

Hi Seb(astien),

it seems that you're working with calc source blocks! :-) I'd like to
leverage calc in org-mode (I'm thinking of unit conversions, etc.:
Mathematica for free men) but I'm not getting it.  I assume that in an
#+src_calc block the mode of operation of calc is algebraic, isn't it?

#+BEGIN_SRC calc
  2 + 2
  sqrt(8)
  # above is working, by the way, does a calc block have a comment sign?
  2 cm
  calc-convert-units(mm)
#+END_SRC

#+RESULTS:
: calc - convert - units(mm)

Above attempt is not working.  Is it also possible to use the RPN? Like
in this fictive block:

#+BEGIN_SRC calc :mode rpn
  2 2 +
  2 'mm  8 'cm + 'in u c
#+END_SRC  

And the *Calc Trail* buffer seems not to reflect any operations, despite
Calc showing the block results in its calculator buffer!

Thanks

        Dieter

> Best regards,
>   Seb

-- 
Best wishes

H. Dieter Wilhelm
Darmstadt
Germany

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: using a simple numerical variable in an org text ocument
  2013-07-27 18:19   ` Dieter Wilhelm
@ 2013-08-14  5:54     ` Sebastien Vauban
  0 siblings, 0 replies; 7+ messages in thread
From: Sebastien Vauban @ 2013-08-14  5:54 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Dieter,

Dieter Wilhelm wrote:
> "Sebastien Vauban" <sva-news-D0wtAvR13HarG/iDocfnWg@public.gmane.org> writes:
>> As macros are expanded before Babel code is evaluated, I would
>> try #+scr_calc{...} with MACRO constants in the formula (untested).
>
> it seems that you're working with calc source blocks! :-) I'd like to
> leverage calc in org-mode (I'm thinking of unit conversions, etc.:
> Mathematica for free men) but I'm not getting it.  I assume that in an
> #+src_calc block the mode of operation of calc is algebraic, isn't it?
>
> #+BEGIN_SRC calc
>   2 + 2
>   sqrt(8)
>   # above is working, by the way, does a calc block have a comment sign?
>   2 cm
>   calc-convert-units(mm)
> #+END_SRC
>
> #+RESULTS:
> : calc - convert - units(mm)
>
> Above attempt is not working.  Is it also possible to use the RPN? Like
> in this fictive block:
>
> #+BEGIN_SRC calc :mode rpn
>   2 2 +
>   2 'mm  8 'cm + 'in u c
> #+END_SRC  
>
> And the *Calc Trail* buffer seems not to reflect any operations, despite
> Calc showing the block results in its calculator buffer!

Sorry to come back to this with a huge delay, but in fact I don't have any
experience with Calc mode at all!  I can't answer your questions without
digging the manuals.

The only thing I make use of is inline Calc for simple computations, to avoid
making mistakes in prices (fictitious example):

--8<---------------cut here---------------start------------->8---
The work will last 20 days and cost src_calc[:results raw]{20 * 498} USD at
the base rate.
--8<---------------cut here---------------end--------------->8---

Best regards,
  Seb

-- 
Sebastien Vauban

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-08-14  5:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-25 21:36 using a simple numerical variable in an org text ocument Matt Price
2013-07-25 21:55 ` Thorsten Jolitz
2013-07-25 23:39 ` Thorsten Jolitz
2013-07-26  1:16   ` Jonathan Leech-Pepin
2013-07-26  7:43 ` Sebastien Vauban
2013-07-27 18:19   ` Dieter Wilhelm
2013-08-14  5:54     ` Sebastien Vauban

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).