Как я могу поместить краткое изложение перед оглавлением, используя резервный запас?

Jan 15 2021

У меня есть bookdownпроект с кастомом template.texи кастомом my-format.cls. Я могу делать следующие вещи в моем template.tex:

$if(abstract)$
\begin{abstract}
$abstract$
\end{abstract}
$endif$

\tableofcontents

\begin{body}
...

и получить реферат для моего нестандартного форматирования. Это работает отчасти потому, что содержание аннотации - это всего лишь один абзац текста, который может быть помещен в начало YAML.

Однако можно ли включить резюме перед оглавлением ?

Я знаю, что могу использовать (в своем index.Rmd)


# Executive Summary {-}

a summary here

# Introduction

this is the first numbered section

Но в этом случае, даже если заголовок раздела «Сводное резюме» не пронумерован, он появляется после оглавления. Можно ли изменить так template.tex, чтобы использовать что-то вроде:

$if(abstract)$
\begin{abstract}
$abstract$
\end{abstract}
$endif$

$if(executive_summary)$
\begin{executivesummary}
% insert summary content here
\end{executivesummary}
$endif$

\tableofcontents

\begin{body}
...

Я могу выделить содержимое (включая рисунки / таблицы / и т. Д.) Из ненумерованного раздела исполнительного резюме (даже если оно должно быть .Rmdполучено из другого файла) и назначить его некоторой (pandoc) переменной, на которую можно ссылаться вместо % If I insert summary content hereприведенной выше? Мне также нужно, чтобы этот же контент был удален из $body$переменной, назначенной по умолчанию (pandoc) .

Ответы

2 MattPollock Jan 15 2021 at 23:32

Спасибо @tarleb! Я подозреваю, что могу получить то, что хочу, через фильтр Lua, но я думаю, что нашел более простой способ в соответствии с вашим ответомhttps://stackoverflow.com/a/53885034/1785752

В index.RmdYAML я добавил

executivesummary: |
  
    ```{r, echo=FALSE, results='asis'}
    res <- knitr::knit_child(quiet = TRUE, 'executive-summary.Rmd')
    cat(res, sep = '\n')
    ```

Однако для этого требуется несколько вещей:

  • Что «затененная» среда определена в преамбуле к template.tex
$if(highlighting-macros)$
$highlighting-macros$
$endif$
  • Что executive-summary.Rmdобъект определен и не имеет YAML и заголовка уровня 1 (заголовок "Краткое изложение" взят из файла шаблона / класса)

Интересно, что я мог просто поместить контент в executivesummaryраздел YAML (т.е. пропустить рендеринг дочернего документа), но параметры фрагмента кода, которые включают строки, иногда в этом случае анализируются как ключи YAML, что приводит к сбою рендеринга. Кроме того, фрагменты кода с отступом в два пробела не получают помощи IDE для проверки синтаксиса или автозаполнения.