Zeigen Sie mehrere Codeblöcke übersichtlich an

9

Ich erstelle ein Blog, blogdownin dem ich Code von R und Code von Stata vergleiche. Ich möchte beide Codes anzeigen, damit der Benutzer vergleichen kann, wie es in R und in Stata gemacht wird. Wenn Sie jedoch zwei oder mehr Blöcke hintereinander platzieren (Code für R, Code für Stata + Ausgabe), ist das Lesen ziemlich unangenehm.

Mir sind mehrere Layouts in den Sinn gekommen, die mehrere Chunks enthalten, aber ich weiß nicht, ob sie bereits implementiert sind oder ob dies überhaupt möglich ist.


Haben Sie eine Schaltfläche zum Anzeigen / Ausblenden von Blöcken (eine Schaltfläche pro Block )

Eine Idee wäre:

  • die R-Code-Chunks, die standardmäßig im Artikel angezeigt werden,
  • Die Stata-Codeblöcke sind standardmäßig unsichtbar, aber sichtbar, wenn der Benutzer auf eine Schaltfläche klickt

Diese Person und diese Person haben es geschafft, ihre Code-Chunks in Blogdown zu falten, aber anscheinend werden standardmäßig alle Chunks ausgeblendet oder angezeigt. Wie kann ich standardmäßig nur einige Blöcke ausblenden? Gibt es eine Option (wie die Optionen eval, echo...), die Codeblock ein- oder ausblendet blogdown?


Chunks mit "Tabs"

Der Titel dieses Teils spricht für sich: Ist es möglich, Tabs in einem Block zu haben, damit wir von einem Code zum anderen wechseln können (genau wie Tabs in Webbrowsern zum Beispiel)?


Zeigen Sie zwei Teile nebeneinander an

Bei einigen blogdownThemen (vielleicht alle, ich weiß es nicht) ist die Breite ziemlich reduziert und es gibt etwas ungenutzten Platz an den Seiten. Ist es daher möglich, die Breite einiger Teile eines Artikels zu erhöhen und zwei Teile nebeneinander anzuzeigen?

Irgendeine Idee, ob eines dieser Layouts realisiert werden kann blogdown?

bretauv
quelle
2
Ich habe Python und R irgendwo nebeneinander gesehen, konnte es nicht replizieren und betete für jemanden, der das löst. Ich habe einen Blog, der sich wirklich verbessern würde, wenn dies möglich wäre
Bruno
1
Können blogdownSie CSS hinzufügen? Mit CSS können Sie zwei Codeblöcke erstellen und nebeneinander platzieren. Mit CSS können Sie auch die Blöcke anzeigen oder ausblenden und möglicherweise die Registerkarten erstellen, aber das ist nicht meine Stärke.
BeastCoder
@BeastCoder Ich denke, ich blogdownkann CSS verwenden (siehe hier ), aber ich habe es nie verwendet, also werde ich es versuchen, aber ich glaube nicht, dass ich dies erreichen kann
bretauv
@bretauv Ich denke, wenn Sie es herausfinden könnten, könnte es sich lohnen, kann ich Ihnen drei Tutorials hinterlassen, die Sie vollständig zum Laufen bringen können, wenn Sie diesen Weg einschlagen möchten.
BeastCoder
1. youtu.be/UB1O30fR-EE (das ist ein HTML-Crashkurs) 2. youtu.be/yfoY53QXEnI (das ist ein CSS-Crashkurs) 3. youtu.be/JJSoEo8JSnc (flexblock) Diese Dinge sollten Sie erreichen können die nebeneinander liegenden Codeblöcke, aber sie liefern Ihnen auch zukünftige Informationen, die immer hilfreich sein werden. Das Hinzufügen des verschwundenen und wieder auftauchenden Codes ist möglicherweise schwieriger, aber wenn Sie einen Link zu etwas benötigen, das Ihnen den Einstieg erleichtert, lassen Sie es mich einfach wissen. Ich bin mit Blogdown nicht allzu vertraut, aber es könnte einen anderen Weg geben, auf dem Sie kein CSS benötigen. In jedem Fall würde ich den CSS
BeastCoder

Antworten:

0

Okay, hier ist eine teilweise Antwort. Ich könnte einfach mehrere Brocken nebeneinander stellen, aber ich weiß nicht, wie ich die anderen Vorschläge in meinem Beitrag realisieren soll.

Das habe ich getan. Basierend auf dieser Seite habe ich einen CSS-Code in meine .RmarkdownDatei eingefügt, der einen der Artikel meines Blogs enthält.

<style>
.flex-container {
  display: flex;
  flex-wrap: nowrap;
  justify-content: center;
  overflow: visible;
}

.flex-container > div {
  width: 200px;
  margin: 10px;
  text-align: left;
  line-height: 75px;
  font-size: 30px;
}
</style>
<div class="flex-container">
```{r message = FALSE}
head(mtcars)
```
</div>

Hier werden der Code head(mtcars)und seine Ausgabe in zwei Blöcken nebeneinander abgelegt . Wenn Sie zuvor einen anderen Block eingefügt haben </div>, lautet die Reihenfolge: ein Block, seine Ausgabe, ein Block, seine Ausgabe usw. Es gibt viele Optionen, mit denen Sie die Anzeige der zwei (oder mehr) Spalten anpassen können. Es gibt einige Dinge, die ich jedoch nicht tun konnte:

  1. Ich weiß nicht, ob es möglich ist, drei Stücke zu bestellen. Wenn Sie beispielsweise einen Block nach dem mit head(mtcars)hinzufügen, lautet die Reihenfolge: Block1, Ausgabe von Block1, Block2. Ich weiß nicht, ob es neu angeordnet werden kann in: chunk1, chunk2, Ausgabe von chunk1.

  2. Wenn ich diesen Code in eine separate CSS-Datei einfüge, wird der betreffende Block so angezeigt, als wäre es normaler Text. Wie kann ich diesen Code in eine externe CSS-Datei einfügen? Ich weiß , dass dies in der erklärt wird blogdown‚s Buch , aber ich konnte es einfach nicht funktioniert. Was ich bisher versucht habe ist:

    • Fügen Sie den obigen Code (zwischen <style>und </style>) in eine Datei ein, die ich benannt main.cssund in die ich eingefügt habethemes/tale-hugo/static/css

    • Fügen Sie den folgenden Code am Anfang meiner .RmarkdownDatei ein. Ich habe versucht, den Pfad durch meinen absoluten Pfad zur Datei main.csszu ersetzen, und ich habe auch versucht, nur style.cssdurch main.cssden folgenden Code zu ersetzen , aber ohne Erfolg

      <html>
          <link rel="stylesheet" href="/css/style.css" />
      </html>
    • Ich habe auch versucht, den Pfad in customCSS einzufügen, config.tomlaber es hat nicht funktioniert

  3. Da CSS zu funktionieren schien, wollte ich sehen, ob es möglich ist, damit Registerkarten zu erstellen. Es ist zwar möglich , erfordert aber JavaScript-Code, und ich habe ihn noch nie zuvor verwendet. Wenn also jemand dabei helfen kann, danke im Voraus.

Grundsätzlich ist dies eine Arbeitsgrundlage, die möglicherweise aktualisiert wird, wenn ich Lösungen finde. Wenn Sie jedoch wissen, wie einige dieser Probleme zu lösen sind, zögern Sie nicht.

bretauv
quelle
@BeastCoder hier ist, was ich bisher gemacht habe
bretauv
0

Da meine vorherige Antwort etwas chaotisch und nicht sehr detailliert war, mache ich eine neue Antwort, die gut zu dem passt, was ich tun wollte (dh die Möglichkeit, einige Codeblöcke zu falten).

Die Lösung ist Jonathan Sidis zu verwenden Details Paket, Wie von dieser Antwort . Ursprünglich war das Ziel dieses Pakets, einige Ausgaben zu verbergen, die viel Platz sessionInfobeanspruchen , z. B. in HTML-Dokumenten, die mit R Markdown (und damit auch mit R Blogdown) erstellt wurden. Hier ist ein Beispiel (entnommen aus der Website des Pakets):

---
title: "Test"
output: html_document
---

```{r}
library(details)

sessioninfo::session_info()%>%
  details::details(summary = 'current session info')
```

Was ich jedoch verbergen möchte, ist nicht die Ausgabe eines R-Codes, sondern eines Stata-Codes (der nicht ausgeführt werden soll), damit Leser R-Code mit Stata-Code vergleichen können, wenn sie möchten. Daher müssen wir dazu HTML verwenden:

---
title: "Test"
output: html_document
---

## Regression with R and Stata

```{r, eval=FALSE}
lm(mpg ~ drat, data = mtcars)
```

<details>
<summary> Stata </summary>
```stata
regress y x
```
</details>

Jetzt können Leser den Stata-Code sehen, wenn sie möchten, und diejenigen, die nicht möchten, werden nicht von zu vielen Codeblöcken abgelenkt. Dies funktioniert auch für Blogdown-Artikel (da es sich "nur" um R Markdown auf einer Website handelt).

Weitere Funktionen ( z. B. Anpassen der versteckten Blöcke ) finden Sie auf der Website des Pakets.

bretauv
quelle