Zastanawiam się, jak rmarkdown
wygenerować plik PDF, który ma układ pionowy i poziomy w tym samym dokumencie. Jeśli istnieje czysta rmarkdown
opcja, byłaby jeszcze lepsza niż użycie lateksu.
Oto mały, odtwarzalny przykład. Po pierwsze, renderowanie tego .Rmd
w RStudio (naciśnij przycisk Knit PDF ) spowoduje powstanie pliku PDF ze wszystkimi stronami w układzie poziomym:
---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
```
\newpage
```{r}
summary(cars)
```
Następnie próba stworzenia dokumentu łączącego układ pionowy i poziomy. Podstawowa konfiguracja w programie YAML
jest wykonywana zgodnie z sekcją „Zawiera” tutaj . in_header
Plik „header.tex” zawiera tylko \usepackage{lscape}
, pakiet sugerowanego przez knitr
układzie poziomym tutaj . .tex
Plik znajduje się w tym samym katalogu co .Rmd
plik.
---
title: "Mixing portrait and landscape"
output:
pdf_document:
includes:
in_header: header.tex
---
Portrait:
```{r}
summary(cars)
```
\newpage
\begin{landscape}
Landscape:
```{r}
summary(cars)
```
\end{landscape}
\newpage
More portrait:
```{r}
summary(cars)
```
Jednak ten kod powoduje błąd:
# ! You can't use `macro parameter character #' in horizontal mode.
# l.116 #
# pandoc.exe: Error producing PDF from TeX source
# Error: pandoc document conversion failed with error 43
Każda pomoc jest bardzo ceniona.
latex
ignorancja jest również winna..md
(dobrze, tutaj), a następnie konwersję md-> tex (tam poszła źle). Komunikat o błędzie nie był pomocny, ponieważ jest to już następny krok (lateks).Opierając się na poprzednich rozwiązaniach, poniższe rozwiązanie nie wymaga
header.tex
pliku pomocniczego . Cała zawartość jest zawarta w.Rmd
pliku. Zamiast tego polecenia LaTeX są zdefiniowane wheader-includes
bloku w nagłówku YAML. Więcej informacji można znaleźć tutaj .Zauważyłem również, że użycie
lscape
pakietu LaTeX powoduje obrócenie zawartości strony, ale nie samej strony PDF. Można to rozwiązać za pomocąpdflscape
pakietu.--- title: "Mixing portrait and landscape WITHOUT a header.tex file" header-includes: - \usepackage{pdflscape} - \newcommand{\blandscape}{\begin{landscape}} - \newcommand{\elandscape}{\end{landscape}} output: pdf_document --- Portrait ```{r} summary(cars) ``` \newpage \blandscape Landscape ```{r} summary(cars) ``` \elandscape \newpage More portrait ```{r} summary(cars) ```
źródło
W najczęstszych przypadkach.
Istnieją 3 warunki.
Zawęźmy do wszystkich warunków.
Pierwsza, powiedzmy, że mamy dokument przeceny, zaczyna się od poniższego kodu. I to jest domyślne ustawienie w Rstudio podczas tworzenia pliku rmd. Kiedy to robisz na drutach. Bez wątpienia automatycznie przyjmie, że jest to tryb portretowy.
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document
Jeśli chcesz połączyć plik PDF w tryb poziomy, jedyną rzeczą, którą musisz dodać, jest opcja class: pozioma
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document classoption: landscape
Jeśli chcesz połączyć oba, będziesz musiał dodać plik .tex w YAML. Odwołując się do linku, o którym wspomniałem powyżej. Możesz pobrać kod .tex tutaj. http://goo.gl/cptOqg Lub po prostu skopiuj kod i zapisz go jako header.tex Następnie, dla ułatwienia życia, umieść ten plik .tex razem z plikiem rmd, który ma być łączony. Upewnij się, że wykonałeś te dwie rzeczy: Skopiuj plik tex i przenieś go razem z plikiem rmd. Zmień początek rmd na:
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document: includes: in_header: header.tex
To jest podsumowanie po tym, jak bawiłem się tym problemem i najbardziej skorzystałem z odpowiedzi baptysty.
Dodałem kilka migawek i przykładów w moim blogerze, moim blogerze .
Mam nadzieję że to pomoże. Powodzenia.
źródło
Jak wspomniał baptiste, jeśli umieścisz polecenia R w środowisku LaTeX, pandoc nie przeanalizuje ich i umieści je tak, jak są w wygenerowanym LaTeX: to jest przyczyną błędu. Poza ładną i prostą poprawką baptiste'a, możesz użyć
xtable
pakietu R, który oferuje możliwość tworzenia bardziej seksownych tabel LaTeX z wyjścia R. Aby poniższy przykład zadziałał, musisz dodać\usepackage{rotating}
wheader.tex
pliku:--- title: "Mixing portrait and landscape" output: pdf_document: keep_tex: true includes: in_header: header.tex --- ```{r, echo=FALSE} library(xtable) ``` Portrait ```{r, results='asis', echo=FALSE} print(xtable(summary(cars), caption="Landscape table"), comment=FALSE) ``` Landscape: ```{r, results='asis', echo=FALSE} print(xtable(summary(cars), caption="Landscape table"), floating.environment="sidewaystable", comment=FALSE) ```
Druga tabela zostanie wydrukowana w
sidewaystable
środowisku, a nie normalnietable
: dlatego zostanie wydrukowana w trybie poziomym, na oddzielnej stronie. Zwróć uwagę, że tabele i rysunki, które są umieszczone w trybie poziomym przezlscape
opakowanie lub wsideways
otoczeniu, zawsze będą umieszczane na oddzielnej stronie, patrz strona 91 tego bardzo ważnego dokumentu:http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf
Ponieważ uważam to za trochę irytujące, udało mi się znaleźć sposób na utrzymanie tabel portretowych i poziomych na tej samej stronie (marnując przy tym całe popołudnie):
--- title: "Mixing portrait and landscape" output: pdf_document: keep_tex: true includes: in_header: header.tex --- ```{r, echo=FALSE} library(xtable) ``` Portrait: ```{r, results='asis', echo=FALSE} print(xtable(summary(cars), caption="Portrait table."), comment=FALSE) ``` Landscape: ```{r, results='asis', echo=FALSE} cat(paste0( "\\begin{table}[ht]\\centering\\rotatebox{90}{", paste0(capture.output( print(xtable(summary(cars)), floating=FALSE, comment=FALSE)), collapse="\n"), "}\\caption{Landscape table.}\\end{table}")) ```
W przypadku tabeli poziomej skorzystałem z
\rotatebox
sugestii podanej tutaj:http://en.wikibooks.org/wiki/LaTeX/Rotations
Aby to zadziałało, muszę tylko wygenerować
tabular
część tabeli zprint(xtable(...
częścią, a następnie muszę przechwycić wyjście i "ręcznie" otoczyć je poleceniamitable
irotatebox
, konwertując wszystko na wyjście ciągu R, aby pandoc nie widział je jako środowiska LaTeX. Dla czystego rozwiązania rmarkdown ... powodzenia!źródło