#r-markdown #newenvironment
#Латекс #r-markdown
Вопрос:
Я пытаюсь создать среду в стиле кодовой книги в документе Rmarkdown, как показано ниже:
---
title: "Title"
author: "Author"
date: "`r Sys.Date()`"
output:
pdf_document:
fig_caption: yes
fig_crop: yes
keep_tex: no
number_sections: yes
citation_package: biblatex
html_document:
df_print: paged
header-includes:
- usepackage[english]{babel}
- usepackage[utf8]{inputenc}
- usepackage{amsmath}
- usepackage{graphicx}
- usepackage{caption}
- usepackage{physics}
- usepackage{float}
- usepackage{tocloft}
- usepackage{inputenc}
- usepackage{setspace}
- usepackage{tabularx}
- usepackage{lipsum}
- usepackage{listings}
- usepackage{wrapfig}
- usepackage{mathtools}
- usepackage{lscape}
- usepackage{rotating}
- usepackage{epstopdf}
- usepackage{hyperref}
- geometry{letterpaper, portrait, margin=1in}
- hypersetup{colorlinks = false, linkbordercolor = {white}, citebordercolor = {white},
urlbordercolor = {white}}
- lstset{language=R, basicstyle=smallttfamily,stringstyle=color{DarkGreen},otherkeywords={0,1,2,3,4,5,6,7,8,9},morekeywords={TRUE,FALSE},deletekeywords={data,frame,length,as,character}, keywordstyle=color{blue}, commentstyle=color{DarkGreen}}
fontsize: 14pt
---
pagenumbering{arabic}
doublespacing
newpage
Defining function here:
newlengthcbl
newenvironment{codebook}[1][]{
settowidth{cbl}{#1}
parskip1em plus .3em minus .2em
parindent0pt
defcode##1##2{{bfseries ##1}hfill
parbox[t]{dimexprlinewidth-15em-cbl}{##2}par}}{noindent}
newpage
singlespacing
Testing out the environment here:
subsubsection{Codebook}
begin{codebook}
code{country}{Country name.}
code{year}{Year of country observation.}
code{codename}{Country code (character).}
code{codenumber}{Country code (numeric).}
end{codebook}
Я подтвердил, что newenvironment
код корректно работает в TeXstudio, но когда я пытаюсь связать этот документ в формате PDF, я получаю следующую ошибку:
! Undefined control sequence.
<argument> code
Я предполагаю, что в newenvironment
команде есть что-то, что плохо работает с синтаксисом rmarkdown. Любая помощь будет оценена.
Ответ №1:
Если вы установите keep_tex: yes
в YAML, вы можете получить подсказку о том, что пошло не так. Начиная с subsubsection{Codebook}
, вы увидите
subsubsection{Codebook}
settowidth{cbl}{code}
parskip 1em plus .3em minus .2em
parindent 0pt
defcode#code#
Итак, что произошло, так это то, что Pandoc попытался обработать
ваше определение среды вместо того, чтобы оставить его в покое. Вы можете заставить его игнорировать определение, введя его следующим образом:
```{=latex}
newlengthcbl
newenvironment{codebook}[1][rob_avprison1]{
settowidth{cbl}{#1}
parskip1em plus .3em minus .2em
parindent0pt
defcode##1##2{{bfseries ##1}hfill
parbox[t]{dimexprlinewidth-15em-cbl}{##2}par}}{noindent}
```
Кажется, этого достаточно в вашем минимальном примере, но вам может потребоваться добавить больше материала в реальный документ.
Комментарии:
1. Спасибо! Это сработало для минимального примера и полного документа. Очень признателен.