FAQ

Wie funktioniert Quarto wirklich?

Angenommen, wir haben folgendes Quarto-File:

index.qmd
---
format: 
    html:
        keep-md: true
        minimal: true
---

Fliesstext wird in *Markdown* geschrieben.

```{r}
Sys.Date()
plot(1:10, (1:10)^2)
:::

Wenn wir den Befehl `quarto render` ausführen, erstellt `knitr` ein Markdown file mit dem Namen `index.html.md`, welches folgendermassen aussieht:

(`keep-md` sorgt dafür, dass das [Markdown-File nicht gelöscht wird](https://quarto.org/docs/computations/execution-options.html#intermediates), `minimal` sorgt dafür, dass das resultierende HTML-File [etwas simpler](https://quarto.org/docs/output-formats/html-basics.html#minimal-html) wird)

::: {.cell filename='index.html.md'}

```{.markdown .cell-code}
---
format: 
    html:
        keep-md: true
        minimal: true
---

Fliesstext wird in *Markdown* geschrieben.

::: {.cell}

```{.r .cell-code}
Sys.Date()
[1] "2023-11-23"
plot(1:10, (1:10)^2)

:::

Der Output aus dem ersten Chunk ist text (das Aktuelle Datum), dieser kann direkt in Markdown eingefügt werden. Der Output aus dem zweiten Chunk ist ein Plot: Dieser wird mit R gerendert, an einem geeigneten Ort abgespeichert und dann in Markdown *verlinkt*. Die Software `pandoc` nimmt dann `index.html.md` und wandelt es in `index.html` um, welches folgendermassen aussieht:


::: {.cell filename='index.html (nur der <body>-Teil)'}

```{.html .cell-code}
<body>
    <p>Fliesstext wird in <em>Markdown</em> geschrieben.</p>
    <div class="cell">
        <div class="sourceCode cell-code" id="cb1">
            <pre
                class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">Sys.Date</span>()</span></code></pre>
        </div>
        <div class="cell-output cell-output-stdout">
            <pre><code>[1] "2023-11-23"</code></pre>
        </div>
    </div>
    <div class="cell">
        <div class="sourceCode cell-code" id="cb3">
            <pre
                class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(<span class="dv">1</span><span class="sc">:</span><span class="dv">10</span>, (<span class="dv">1</span><span class="sc">:</span><span class="dv">10</span>)<span class="sc">^</span><span class="dv">2</span>)</span></code></pre>
        </div>
        <div class="cell-output-display">
            <p><img src="index_files/figure-html/unnamed-chunk-2-1.png" width="672"></p>
        </div>
    </div>
</body>

:::

Wie wir sehen, wird der Text Markdown im HTML-File mit <em> umschlossen, während der Plot mit <img> eingefügt wird.

Fehlermeldungen

ERROR: SyntaxError: Unexpected token < in JSON at position 2

Nach ausführen von quarto preview erhalte ich den obigen Fehler. Der output im Terminal sieht folgendermassen aus:

[54/59] fallstudie_n/1_Vorbemerkung.qmd
[55/59] fallstudie_n/2_Datenverarbeitung_Uebung.qmd
[56/59] fallstudie_n/2_Datenverarbeitung_Loesung.qmd
ERROR: SyntaxError: Unexpected token < in JSON at position 2

Ich kann den Fehler beheben, indem ich quarto render das-letzte-qmd-file-vor-der-fehlermeldung.qmd ausführe. In dem obigen Fall also:

quarto render fallstudie_n/2_Datenverarbeitung_Loesung.qmd

error: Your local changes to the following files would be overwritten by merge:

Bei einem git pull kann es zu folgender Fehlermeldung kommen.

error: Your local changes to the following files would be overwritten by merge:
        prepro/Prepro1_Demo.qmd
        ...
Please commit your changes or stash them before you merge.
Aborting

Dies bedeutet, dass das genannte File (bzw. die genannten Files) auf Github in Konfikt stehehen könnten mit dem File (bzw. den Files) bei dir auf der Festplatte. Um allfällige Konflikte zu lösen, müssen die lokalen Änderungen zuerst gestageed und dann commited werden. Anschliessend können die Änderungen von Github heruntergeladen werden.

git add "*.qmd"                # staged alle Files mit der Endung .qmd
git commit -m "meine message" 
git pull                       # lädt die Änderungen von Github herunter

You have divergent branches and need to specify how to reconcile them

git pull
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

Wie löse ich einen merge-conflict?

TBD

Warum ist datasets ein separates Git-Repo?

  1. Die Datensätze sind häufig ein paar megabyte gross. In der Vergangenheit haben kleine Änderungen an diesen Files das Repo extrem ge-bloatet (vergrössert)
  2. Die Datenstäze sind teilweise vertraulich und sollten nicht öffentlich geteilt werden (das entsprechende Repo ist private) → dies sollte sich in Zukunft hoffentlich ändern (OER!)