Rstudio rmarkdown: एक ही पीडीएफ में पोर्ट्रेट और लैंडस्केप लेआउट दोनों


84

मुझे आश्चर्य है कि rmarkdownएक पीडीएफ बनाने के लिए कैसे उपयोग किया जाए, जिसमें एक ही दस्तावेज़ में चित्र और परिदृश्य लेआउट दोनों हैं। यदि कोई शुद्ध rmarkdownविकल्प है जो लेटेक्स का उपयोग करने से बेहतर होगा।

यहाँ एक छोटा सा, प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है। सबसे पहले, इसे .RmdRStudio (प्रेस निट पीडीएफ बटन) में रेंडर करने से परिदृश्य लेआउट में सभी पृष्ठों के साथ एक पीडीएफ परिणाम होता है:

---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---

```{r}
summary(cars)
```

\newpage
```{r}
summary(cars)
```

फिर एक दस्तावेज बनाने का प्रयास जो चित्र और परिदृश्य लेआउट को मिलाता है। इसमें मूल सेटअप YAML'शामिल' खंड के अनुसार किया जाता हैin_headerफ़ाइल 'header.tex' केवल शामिल \usepackage{lscape}, एक पैकेज के लिए सुझाव दिया knitrलैंडस्केप लेआउट यहाँ.texफ़ाइल के रूप में एक ही निर्देशिका में है .Rmdफ़ाइल।

---
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)
```

हालाँकि, इस कोड में त्रुटि हुई:

# ! 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

किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

जवाबों:


78

तो, लेटेक्स वातावरण की सामग्री को पार्स pandoc नहीं करता है, लेकिन आप इसे अपनी फ़ाइल में कमांडों को फिर से परिभाषित करके मूर्ख बना सकते हैं header.tex:

\usepackage{lscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}

इस प्रकार, यहाँ \begin{landscape}करने के लिए नए सिरे से परिभाषित \blandscapeहै, और \end{landscape}करने के लिए \elandscape.Rmdफ़ाइल में उन नए परिभाषित कमांड का उपयोग करना काम करने लगता है:

---
title: "Mixing portrait and landscape"
output:
    pdf_document:
        includes:
            in_header: header.tex 
---

Portrait
```{r}
summary(cars)
```

\newpage
\blandscape
Landscape
```{r}
summary(cars)
```
\elandscape

\newpage
More portrait
```{r}
summary(cars)
```

आपके शोध और उत्तर (+1) के लिए धन्यवाद। 'लेटेक्स वातावरण की सामग्री को पार्स नहीं करता है' इसमें शामिल अनुभाग से पूरी तरह से स्पष्ट नहीं है । लेकिन मुझे लगता है कि मेरी latexअज्ञानता को भी दोष देना है।
हेनरिक

4
यह एक जटिल टूलकिन है, जिसमें तीन / चार अलग-अलग खिलाड़ी (नाइट्र-रमार्कडाउन / पंडोक-लेटेक्स) हैं और मुझे लगता है कि दस्तावेज वाले सामान के बाहर, यह पता लगाना काफी कठिन है कि चीजें कहां टूटती हैं। सबसे अच्छा तरीका उन्हें स्वतंत्र रूप से चलाने के लिए लगता है: पहले बुनना, परिणामी .md(ठीक है, यहां) को देखें, फिर एमडी-> टेक्स रूपांतरण (यही वह गलत है)। त्रुटि संदेश मददगार नहीं था क्योंकि यह पहले से ही अगला चरण (लेटेक्स) है।
बपतिस्मा

इस समाधान के साथ, पीडीएफ में, "# निर्माण" द्वारा बनाई गई संरचित हेडर के बजाय, # प्रतीक के रूप में दिखाई देता है
JMarcelino

3
मुझे लगता है कि गूंगा लेटेक्स सवाल है: हेडर.टेक्स फ़ाइल कहां रहती है (या चाहिए), ताकि इसे पढ़ा जाए? मैं RMarkdown का भारी उपयोग करता हूं, लेकिन अपेक्षाकृत नया हूं, और अभी तक सभी इंटरलॉकिंग पैकेजों को समझ नहीं पाया हूं और वे एक साथ कैसे काम कर रहे हैं।
माइक विलियमसन 16

शीर्ष लेख। शीर्ष फ़ाइल उसी निर्देशिका में होनी चाहिए
बपतिस्मा देने वाला

50

पिछले समाधानों पर निर्माण, निम्नलिखित समाधान के लिए एक सहायक header.texफ़ाइल की आवश्यकता नहीं होती है । सभी सामग्री .Rmdफ़ाइल में निहित हैं । LaTeX कमांड को इसके बजाय header-includesYAML हेडर में एक ब्लॉक में परिभाषित किया गया है । अधिक जानकारी यहां पाई जा सकती है

इसके अलावा, मैंने देखा कि lscapeLaTeX पैकेज का उपयोग करना पृष्ठ की सामग्री को घुमाता है, लेकिन पीडीएफ पेज को ही नहीं। यह pdflscapeपैकेज का उपयोग करके हल किया गया है।

---
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)
```

1
मेरे सिस्टम पर, यह समाधान काम नहीं कर रहा है। मैं एक मैक OS_10.13.4 पर R-3.4.4, rmarkdown_1.9, knitr_1.20 चला रहा हूं। आश्चर्य है कि क्या मुद्दा हो सकता है?
जियोकेम बी

@GeochemB क्या अपेक्षित LaTeX पैकेज सही ढंग से स्थापित हैं? मुझे हाल ही में TinyTeX के साथ सफलता मिली है और इसे सुझाता हूं
मेगेट्रॉन

जब मैंने उन्हें स्थापित किया था, तब उन्होंने कोई त्रुटि नहीं की थी, लेकिन मैं दोबारा जांच और रिपोर्ट करूंगा। सिर के लिए धन्यवाद, मैं उस के बारे में सोचा नहीं था और एक पीडीएफ / लेटेक्स के लिए नया हूँ।
जियोकेम बी

@ मेग्रेट्रॉन मैं टेक्स लाइव उपयोगिता के माध्यम से गया और ओबेरडिएक पैकेज स्थापित और अद्यतन किया गया। इसलिए आवश्यकताएं हैं, लेकिन अभी भी कोई पासा नहीं है। यहां तक ​​कि जब मैं ऊपर कोड को कॉपी / पेस्ट करता हूं, तो अभिविन्यास में कोई बदलाव नहीं होता है।
जियोकेम बी

1
@GeochemB मुझे इस कोड का उपयोग करने में समान समस्या हुई। मैंने SumatraPDF v3.1.1 और Adobe Acrobat DC और Pro में दस्तावेज़ देखने की कोशिश की। दस्तावेज़ीकरण से ओबेरेडिक को मिकटेक्स में शामिल किया गया है। मेरी समझ के अनुसार अगर मेरे पास मिकटैक्स स्थापित है तो pdflscape अच्छा होना चाहिए। जिज्ञासु अगर किसी को समाधान मिल गया।
पैट्रिक

22

सबसे आम मामलों के लिए।

3 शर्तें हैं।

  1. पोर्ट्रेट मोड में सब कुछ।
  2. लैंडस्केप मोड में सब कुछ।
  3. चित्र और परिदृश्य मोड का मिश्रण।

आइए प्रत्येक स्थिति को संकीर्ण करें।

  1. पहला, यह कहें कि हमारे पास मार्कडाउन दस्तावेज है, जो नीचे दिए गए कोड से शुरू होता है। और जब आप एक rmd फ़ाइल बनाते हैं तो यह Rstudio में डिफ़ॉल्ट सेटिंग है। जब आप इसे बुनते हैं। यह स्वतः ही यह संदेह के बिना एक चित्र विधा है मान जाएगा।

    title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
    
  2. जब आप पीडीएफ फाइल को लैंडस्केप मोड में बुनना चाहते हैं, तो केवल एक चीज जो आपको जोड़ने की जरूरत है वह है क्लासॉप्शन: लैंडस्केप

        title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
        classoption: landscape
    
  3. यदि आप दोनों का मिश्रण चाहते हैं, तो आपको YAML में .tex फ़ाइल को जोड़ना होगा। ऊपर दिए गए लिंक को संदर्भित करके। आप यहां .tex कोड डाउनलोड कर सकते हैं। http://goo.gl/cptOqg या बस कोड को कॉपी करें और इसे शीर्ष लेख के रूप में सहेजें। फिर, जीवन बनाने के लिए, इस .tex फ़ाइल को rmd फ़ाइल के साथ बुना हुआ रखें। सुनिश्चित करें कि आपने ये दो काम किए हैं: टेक्स फ़ाइल की प्रतिलिपि बनाएँ और इसे rmd फ़ाइल के साथ स्थानांतरित करें। Rmd की शुरुआत को बदलें:

     title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output:
          pdf_document:
            includes:
              in_header: header.tex
    

इस मुद्दे के साथ खेलने के बाद यह सारांश है और ज्यादातर बपतिस्मा के जवाब से लाभान्वित हुआ।

मैंने अपने ब्लॉगर अपने ब्लॉगर में कुछ स्नैपशॉट और उदाहरण शामिल किए ।

उम्मीद है की यह मदद करेगा। सौभाग्य।


2
आपका दृष्टिकोण काम करता है। समझने में आसान बनाने के लिए, मुझे लगता है कि पैंडॉक के साथ समस्या यह है कि यह अजीब हो जाता है जब आप मैक्रोज़ के बजाय वातावरण का उपयोग करते हैं। इसीलिए मैंने आपको सुझाव दिया, जैसा कि आपने सुझाव दिया था, \ newcommand {\ blandscape} {\ start {लैंडस्केप}} और \ newcommand {\ elandscape} {\ end {लैंडस्केप}} मेरे हेडर (पीडीएफ लैंडस्केप पैकेज) में, और यह पूरी तरह से काम करता है। धन्यवाद!
ग्वेगायोन

1
मैंने ऊपर दिए गए इन चरणों का पालन किया (ब्लॉग को देखकर मदद की), और इसने बहुत अच्छा काम किया। धन्यवाद!
स्कॉट वॉर्लैंड

4

जैसा कि बपतिस्मा देने वाले ने उल्लेख किया है, यदि आप आर कमांडों को एक एलईटीएक्स वातावरण के भीतर संलग्न करते हैं, तो पंडोक उन्हें पार्स नहीं करेगा और उन्हें जगह देगा क्योंकि वे उत्पन्न हुए एलएटीएक्स में हैं: यह वह है जो त्रुटि का कारण बनता है। बपतिस्मा के अच्छे और सरल फिक्स से परे, आप xtableआर पैकेज का उपयोग कर सकते हैं , जो आर आउटपुट से कामुक दिखने वाले लाटेक्स टेबल बनाने की संभावना प्रदान करता है। काम करने के लिए निम्न उदाहरण के लिए, आपको फ़ाइल \usepackage{rotating}में जोड़ना होगा header.tex:

---
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)
```

दूसरी तालिका को sidewaystableसामान्य के बजाय पर्यावरण के भीतर मुद्रित किया जाएगा table: इसलिए इसे एक अलग पृष्ठ में, लैंडस्केप मोड में मुद्रित किया जाएगा। ध्यान दें कि टेबल और आंकड़े जो lscapeपैकेज द्वारा या sidewaysपर्यावरण में लैंडस्केप मोड में रखे गए हैं, उन्हें हमेशा एक अलग पेज में रखा जाएगा, इस महत्वपूर्ण दस्तावेज़ के पेज 91 देखें:

http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf

चूंकि मुझे यह थोड़ा कष्टप्रद लगता है, इसलिए मैं एक ही पृष्ठ के भीतर दोनों चित्र और परिदृश्य तालिकाओं को रखने का एक तरीका खोजने में कामयाब रहा (इस प्रक्रिया में मेरी पूरी दोपहर बर्बाद कर रहा है):

---
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}"))
```

परिदृश्य तालिका के लिए, मैंने \rotateboxयहां दिए गए सुझाव का उपयोग किया है:

http://en.wikibooks.org/wiki/LaTeX/Rotations

इस काम के लिए, मुझे केवल tabularतालिका के print(xtable(...हिस्से को भाग के साथ उत्पन्न करना है , फिर मुझे आउटपुट को कैप्चर करना होगा और "मैन्युअल रूप से" इसे tableऔर rotateboxकमांड के साथ घेरना होगा , सब कुछ एक स्ट्रिंग आर आउटपुट में परिवर्तित करना है, ताकि पैंडोक दिखाई न दे उन्हें LaTeX वातावरण के रूप में। एक शुद्ध rmarkdown समाधान के लिए ... शुभकामनाएँ!


इस पृष्ठ पर केवल यही एक है जिसने मेरे लिए काम किया। धन्यवाद, रेनाटो!
स्टुअर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.