From 667ba67570361bad878c74afdebe068b7916a1bb Mon Sep 17 00:00:00 2001
From: Matt Huszagh
Date: Thu, 30 Dec 2021 06:54:24 -0800
Subject: [PATCH] lisp/ob-core.el: Remove additional newline at end of results
* lisp/ob-core.el (org-babel--insert-results-keyword): Remove newline
at end of results block.
Inserting this newline prevents a valid use-case and protects against
an edge-case that is completely avoidable without the additional
guarantee it provides. The original intention for inserting the
newline was to avoid the edge case in which a user does not insert a
newline between a source block and the subsequent text and the
subsequent text is merged with the results.
However, there are valid cases in which a user would not want a
newline between a results block and the subsequent buffer text. For
example, many display equations in LaTeX are considered as part of the
surrounding paragraph. Additionally, it is possible to setup a LaTeX
source block to be executable and insert results into the org
buffer. Consider the following example:
some org file (leading colons to prevent git ignoring lines starting
with #):
```
: We can write the simplest equation as
: #+begin_src latex
: \begin{equation}
: 1 + 1 = 2,
: \end{equation}
: #+end_src
: and hope that no one is confused by this.
```
We might then execute this source block to generate some output. For
example, this might generate and SVG image of the block and insert it
into the buffer. That should result in something like
```
: We can write the simplest equation as
: #+begin_src latex
: \begin{equation}
: 1 + 1 = 2,
: \end{equation}
: #+end_src
: #+RESULTS:
: #+begin_results
: [[file:some/file.svg]]
: #+end_results
: and hope that no one is confused by this.
```
When formatted this way, the resulting tex
file (org-latex-export-to-latex) will be:
```
We can write the simplest equation as
\begin{equation}
1 + 1 = 2,
\end{equation}
and hope that no one is confused by this.
```
which will render correctly. Specifically, the display math
environment will not start a new paragraph after the leading "as" and
a new paragraph will not start between the end of the math display and
the trailing "and".
However, the current behavior results in
```
: We can write the simplest equation as
: #+begin_src latex
: \begin{equation}
: 1 + 1 = 2,
: \end{equation}
: #+end_src
: #+RESULTS:
: #+begin_results
: [[file:some/file.svg]]
: #+end_results
: and hope that no one is confused by this.
```
This blank line necessarily starts a new paragraph in TeX.
Finally, as previously stated, it is entirely possible to control
whether there is a newline between the results block and subsequent
text by leaving a newline between the source block and text. For
example,
```
: We can write the simplest equation as
: #+begin_src latex
: \begin{equation}
: 1 + 1 = 2,
: \end{equation}
: #+end_src
: and hope that no one is confused by this.
```
would still result in
```
: We can write the simplest equation as
: #+begin_src latex
: \begin{equation}
: 1 + 1 = 2,
: \end{equation}
: #+end_src
: #+RESULTS:
: #+begin_results
: [[file:some/file.svg]]
: #+end_results
: and hope that no one is confused by this.
```
---
lisp/ob-core.el | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 7a9467b0e..c0cb283bd 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -1994,14 +1994,9 @@ the results hash, or nil. Leave point before the keyword."
":"
(when name (concat " " name))
"\n"))
- ;; Make sure results are going to be followed by at least one blank
- ;; line so they do not get merged with the next element, e.g.,
- ;;
- ;; #+results:
- ;; : 1
- ;;
- ;; : fixed-width area, unrelated to the above.
- (unless (looking-at "^[ \t]*$") (save-excursion (insert "\n")))
+ ;; We deliberately do not insert a newline here since there are
+ ;; valid cases in which a user does not want a blank line between a
+ ;; results block and the subsequent text.
(beginning-of-line 0)
(when hash (org-babel-hide-hash)))
--
2.31.1