A bit more experimenting shows that asynchronous execution is actually a part of my original problem. By default, I have jupyter-python blocks running asynchronously. In that case, the tables don’t format quite right, as I noted. But if I add the header ":async nil", the table comes out fine. Table formatting is OK in python blocks with or without asynchronous execution. 

On May 18, 2022, at 2:00 PM, John Kitchin <jkitchin@andrew.cmu.edu> wrote:

I would guess it could. I don't do anything asynchronous, and I am not sure when org-babel-after-execute-hook runs, if it is immediately there is no table to clean up I suppose. It is not necessary to run on  a subtree, but on a very large document you probably don't want to do org-element-parse often.


John

-----------------------------------
Professor John Kitchin (he/him/his)
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803


On Wed, May 18, 2022 at 4:57 PM Richard Stanton <rhstanton@berkeley.edu> wrote:
Thanks for the suggestion, John. I’ve tried playing around with this, and am I right that it seems to have trouble when execution is asynchronous?

On May 18, 2022, at 1:16 PM, John Kitchin <jkitchin@andrew.cmu.edu> wrote:

I use a function in an after execute hook for this: https://github.com/jkitchin/scimax/blob/master/scimax-org.el#L205

This works on a subtree, which has been fine for me. You could adapt it to only work in the results section.

John

-----------------------------------
Professor John Kitchin (he/him/his)
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803


On Wed, May 18, 2022 at 4:07 PM Richard Stanton <rhstanton@berkeley.edu> wrote:
I’m running Emacs 28.1 under macOS 12.4 and want to create tables from Python code blocks that can be exported to either LaTeX or HTML. The simplest way to do this seems to be to generate the output as an org table, and using the built-in version of org (9.4.6 (9.4.6-798-g738759.dirty-elpaplus @ /Users/stanton/.emacs.d/elpa/org-plus-contrib-20210929/)), this works fine using either a python or emacs-jupyter code block:

#+begin_src jupyter-python
[
    ["Wide a", "b", "c"],
    None,
    [1, 2, 3],
    [4, 5, 6],
    None,
    [7, 8, 9]
]
#+end_src

#+RESULTS:
| Wide a | b | c |
|--------+---+---|
|      1 | 2 | 3 |
|      4 | 5 | 6 |
|--------+---+---|
|      7 | 8 | 9 |

#+begin_src python
return [
    ["Wide a", "b", "c"],
    None,
    [1, 2, 3],
    [4, 5, 6],
    None,
    [7, 8, 9]
]
#+end_src

#+RESULTS:
| Wide a | b | c |
|--------+---+---|
|      1 | 2 | 3 |
|      4 | 5 | 6 |
|--------+---+---|
|      7 | 8 | 9 |


To use the latest version of org, I change just two lines in my init.el from

(straight-use-package '(org :type built-in))
(straight-use-package '(org-contrib :type built-in))

to

(straight-use-package '(org :type git :repo "https://code.orgmode.org/bzg/org-mode.git"))
(straight-use-package '(org-contrib :type git :repo "https://git.sr.ht/~bzg/org-contrib”))

Having done this, the python block still works fine, but the horizontal lines in the jupyter-python block are no longer properly aligned with the text:

#+begin_src jupyter-python
[
    ["Wide a", "b", "c"],
    None,
    [1, 2, 3],
    [4, 5, 6],
    None,
    [7, 8, 9]
]
#+end_src

#+RESULTS:
| Wide a | b | c |
|---+---+---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
|---+---+---|
| 7 | 8 | 9 |

#+begin_src python
return [
    ["Wide a", "b", "c"],
    None,
    [1, 2, 3],
    [4, 5, 6],
    None,
    [7, 8, 9]
]
#+end_src

#+RESULTS:
| Wide a | b | c |
|--------+---+---|
|      1 | 2 | 3 |
|      4 | 5 | 6 |
|--------+---+---|
|      7 | 8 | 9 |

By the way, the org version loaded this time is 9.5.3 (9.5.3-g277897 @ /Users/stanton/.emacs.d/straight/build/org/).

The table exports OK, but isn’t much fun to look at in the org file itself.

Since I like to use emacs-jupyter, any suggestions would be appreciated. I know this worked fine just a few weeks ago.

Thanks!

Richard Stanton