Уменьшение пространства между фрагментами кода и выводом кода в презентации rmarkdown beamer

Я создаю презентацию с помощью rmarkdown и LaTeX / Beamer. Я хотел бы уменьшить интервал между отображаемыми R-командами и R-выводом. Я считаю, что это связано с параметрами интервала между абзацами в LaTeX / Beamer.

Это что-то, что я должен сделать в rmarkdown (параметры фрагмента, knit_hooks или что-то еще?), В заголовке pandoc Yaml (какой-то параметр pandoc?) Или в файле шаблона LaTeX beamer? Я чувствую, что это должно быть в файле шаблона LaTeX.

Ниже приведен рабочий пример минимального файла разметки и файла шаблона .tex, который я использую для управления некоторыми настройками луча.

example.Rmd

---
title: "Untitled"
author: "Ryan"
date: "March 1, 2016"
output:
  beamer_presentation:
    pandoc_args: '--latex-engine=xelatex'
    includes:
      in_header: latex-topmatter.tex
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Vertical Spacing is too much

Here is a working example.

- some
- bullets

Example code:

```{r, echo = TRUE}
a <- 1
a
a+a
```

latex-topmatter.tex

% declare overall beamer theme to use as baseline
\usetheme{default}

% make code-output smaller
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{fontsize=\tiny,commandchars=\\\{\}}

% make console-output smaller:
\makeatletter
\def\verbatim{\tiny\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
\makeatother

% set vertical spacing between paragraphs:
% \parskip{0pt}
% \addtobeamertemplate{blocks}{}{\setlength{\parskip}{0pt}}
% \addtobeamertemplate{block begin}{}{\setlength{\parskip}{0pt}}
% \addtobeamertemplate{block end}{}{\setlength{\parskip}{0pt}}
% % \setlength{\emergencystretch}{0em}
\setlength{\parskip}{0pt}

Я пробовал сделать шрифт R-команд или R-вывода меньше, что, похоже, не влияет на интервал между абзацами.

Я пробовал использовать knit_hooks(), как в этом примере: https://github.com/ramnathv/slidify/issues/189, что в основном работает, но тогда я не могу уменьшить размер шрифта кода и вывода.

Я также пробовал использовать \parskip{0pt} и несколько других параметров проекторов или параметров parskip, которые прокомментированы в разделе latex-topmatter.tex выше. Ни один из них, похоже, не меняет интервал между фрагментами текста, R-кодом или R-выводом. Я вообще ищу в нужном месте?

parskipNotWorking


person RyanStochastic    schedule 01.03.2016    source источник
comment
Вы когда-нибудь находили решение этой проблемы? Спасибо.   -  person DataJack    schedule 22.12.2016
comment
@DataJack см. Ниже   -  person Martin Schmelzer    schedule 04.01.2017


Ответы (1)


Вот рабочий пример. Обратите внимание на определения в конце файла заголовка:

  • Фрагменты исходного кода содержатся внутри среды Shaded, которая, в свою очередь, использует \OuterFrameSep в качестве интервала. Так что нам нужно переопределить это.
  • С \preto мы добавляем команды \topsep=-10pt \partopsep=-10pt к каждой дословной среде. Это влияет на интервал между выходными фрагментами.

example.Rmd

---
title: "Untitled"
author: "Martin"
date: "January 4, 2017"
output:
  beamer_presentation:
    keep_tex: yes
    pandoc_args: --latex-engine=xelatex
    includes:
      in_header: latex-topmatter.tex
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Vertical Spacing is just right

Here is a working example.

- some
- bullets

Example code:

```{r, echo = TRUE}
a <- 1
a
a+a
```

latex_topmatter.tex

% declare overall beamer theme to use as baseline
\usetheme{default}

% make code-output smaller
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{fontsize=\tiny,commandchars=\\\{\}}

% make console-output smaller:
  \makeatletter
\def\verbatim{\tiny\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
\makeatother


\setlength{\parskip}{0pt}


\setlength{\OuterFrameSep}{-4pt}
\makeatletter
\preto{\@verbatim}{\topsep=-10pt \partopsep=-10pt }
\makeatother

введите описание изображения здесь

person Martin Schmelzer    schedule 04.01.2017
comment
Спасибо за решение, Мартин! Вы можете предложить какой-нибудь другой способ найти это решение? Один из способов - разместить здесь мой вопрос и ждать 9 месяцев. Просматривая латексную документацию, я регулярно пытаюсь найти то, что мне нужно, и этот вопрос - лишь один из примеров. - person RyanStochastic; 27.02.2017
comment
Я не могу. Я действительно удивлен, что это заняло так много времени, учитывая, что ответ не так уж и сложен. - person Martin Schmelzer; 27.02.2017