[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to specify column alignment in LaTeX table output?
From: |
Richard H Stanton |
Subject: |
Re: How to specify column alignment in LaTeX table output? |
Date: |
Fri, 10 Jan 2025 08:59:57 -0800 |
> On Jan 10, 2025, at 1:47 AM, Rens Oliemans <hallo@rensoliemans.nl> wrote:
>
> Richard H Stanton <rhstanton@berkeley.edu> writes:
>
>> what are the recommended headers for a Python code block that exports a
>> table? For example, ":results output raw” and ":results output drawer” both
>> seem to work (without :wrap), while “:results output” puts everything in an
>> example block, which then seems to get exported verbatim, not as a LaTeX
>> table.
>
> Take a look at
> https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html. I
> found
> this link in the Org manual, "(org) Results of Evaluation", and then to
> "Documentation" link of python. From that page:
>
> :results {output, value}: Output results come from whatever the python code
> prints on stdout. Value results are the value of the last expression
> evaluated in the code block. Value mode is the default (as with other
> languages). In value mode you can use the following subtypes:
>
> verbatim: value is returned as string. In particular, use this to
> prevent conversion of lists and tuples to tables.
>
> table: (Org 9.7+) Try to convert the result to an Org table. Dicts,
> numpy arrays, and pandas DataFrames/Series can be returned as tables
> this way (by default, they are printed verbatim). Note that lists and
> tuples are already converted to table by default (use verbatim to
> prevent that).
>
> So, ':results output' will output whatever python prints to stdout. With
> 'print()', I think that this will just be a string, and no conversion will
> take
> place. If you specify 'output raw', python will still just print the string,
> but
> *Org mode* will now interpret it as raw Org mode. This will probably work
> fine,
> but you'll have to add '|' and newlines in your string correctly. Alternative:
>
> ':results value', the default. In this case ob-python will convert lists and
> tuples to tables by default (and optionally, dicts and DataFrames as well).
>
> That would be my recommendation: a code block with the default headers, which
> returns a list of lists. I've attached an org file which does this.
>
>> I actually generate this table from a Python code block. In the past, I’ve
>> often run into problems with raw output (like this), where running the code
>> block multiple times causes the output to appear multiple times, rather than
>> overwriting.
>
> ':results append' will cause the output to appear multiple times, but I expect
> that it happened due to other circumstances (':results replace' is default
> and I
> expect you didn't change that). One such circumstance is when you, say, add a
> ':results output' header argument, and then change it back. For reasons
> unknown
> to me, Org mode will then see the previous #+RESULTS: block as unrelated to
> the
> current one, and will not replace it.
>
> This is then kind of annoying, because you'll have to add the #+ATTR_LATEX:
> line
> to the table again. I'd fix this manually, but if it gets annoying you can use
> the suggestion by PA.
Thanks, Rens. Lots of useful information!
Regarding output appearing multiple times, I realize it’s not tables that are
the prime offender. It’s more when I’m outputting text, usually trying to get
Python to generate LaTeX code, e.g., after symbolically solving a system of
equations in Python.
Here’s an example:
#+begin_src python :results output replace raw
print("a")
#+end_src
Every time I run this code block, I get another line containing “a”. If I don't
use the raw option, e.g.,
#+begin_src python :results output
print("a")
#+end_src
the multiple-output problem goes away, but now it appears as
#+RESULTS:
: a
The extra “: “ interferes with LaTeX if I’ve just output something like
“\begin{equation}”, which is why I’m using raw in the first place.
Wrapping the output in a LaTeX environment helps, e.g.,
#+begin_src python :results output raw :wrap flushleft
print("a")
#+end_src
But is there a “preferred” way to output arbitrary text (e.g., LaTeX equations)
from Python code blocks so that they compile fine *and* don’t append?
Thanks for this discussion. This is about where I get to every time I think I
want to use org mode to create LaTeX documents with embedded, live
calculations, and then after wrestling with the headers for a while I tend to
go back again to separate .py and .tex files controlled by GNU Make...
- How to specify column alignment in LaTeX table output?, Richard H Stanton, 2025/01/09
- Re: How to specify column alignment in LaTeX table output?, Rens Oliemans, 2025/01/09
- Re: How to specify column alignment in LaTeX table output?, Richard H Stanton, 2025/01/09
- Re: How to specify column alignment in LaTeX table output?,
Richard H Stanton <=
- Re: How to specify column alignment in LaTeX table output?, Rens Oliemans, 2025/01/10
- Re: How to specify column alignment in LaTeX table output?, Richard H Stanton, 2025/01/10
- Re: How to specify column alignment in LaTeX table output?, Richard H Stanton, 2025/01/10
- Re: How to specify column alignment in LaTeX table output?, Ihor Radchenko, 2025/01/10
- Re: How to specify column alignment in LaTeX table output?, Richard H Stanton, 2025/01/10