Podkreśl w RMarkdown do Microsoft Word

Sep 02 2020

Próbuję wymyślić w RMarkdown, jak podkreślić niektóre słowa. Jeśli robię na drutach HTML, mogę to zrobić:

<u>These words are underlined</u>

Co działa dobrze w tym przypadku. Ale podkreślenie nie jest utrwalane, kiedy robię na drutach Microsoft Word. Nie sądzę, aby w RMarkdown wprowadzono jakiekolwiek zmiany, aby zrobić to natywnie, takie jak polecenia dla pogrubienia i kursywy. Jakieś sugestie?

Dzięki

Odpowiedzi

1 SteffenMoritz Sep 02 2020 at 05:25

Właśnie wypróbowałem wszystko, co przyszło mi do głowy - wydaje się niemożliwe (fajnie byłoby usłyszeć o faktycznie działających rozwiązaniach)

Wypróbowałem następujące:

<u> text </u>
<ins> text </ins>
<span style="text-decoration:underline"> text </span>
$\text{\underline{LaTeX makes it possible}}$
$\underline{LaTeX makes it possible}$

Chociaż większość z nich działała w przypadku html_document - żadna tak naprawdę nie działała w przypadku Rmarkdown do Word.

  1. <u> - oczywiste rozwiązanie - nie zadziałało.

  2. <ins> co jest często sugerowane - nie zadziałało.

  3. html5 znaczniki - nie działały

  4. LaTeX - nie działał

Może się zdarzyć, że to po prostu nie jest możliwe.

1 stefan Oct 01 2020 at 17:01

Na co warto ... (;. O ile dobrze rozumiem, to nie jest to możliwe za pomocą znaczników HTML Powodem znaczniki HTML pracy podczas renderowania HTML jest to, że kod HTML nie jest poruszone rmarkdown, knitralbo pandoci po prostu przeszedł aż do końcowego dokumentu HTML jako tekstu. W przypadku HTML przeglądarka wie, co zrobić z tym „tekstem”. Ale w programie Word lub Latex jest to po prostu tekst, który będzie wyświetlany tak, jak jest.

Jednak w przypadku wyjścia Worda możesz rzucić okiem na oficjalny pakiet, który dodaje dodatkowe funkcje Worda rmarkdownza pośrednictwem pakietu oficera , np. Poniższy przykład RMD pokazuje, jak uzyskać podkreślony tekst w programie Word:

---
title: "officedown template"
output: officedown::rdocx_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, fig.cap = TRUE)
library(officedown)
library(officer)

ft <- fp_text(underlined = TRUE)
```


This document presents most of the features of the package `r ftext("officedown", ft)`. 

fry Oct 05 2020 at 21:33

Problem składa się z dwóch części:
1.) Pobranie Rmarkdown / pandoc do renderowania html podczas łączenia się z plikiem Word. Jak to osiągnąć, zostało wyjaśnione tutaj: tagi HTML w Rmarkdown do dokumentu Word przez użytkownika @tarleb (proszę rozważyć zagłosowanie za tą odpowiedzią, ponieważ jest ona podstawą mojej).
2.) <u>dla podkreślenia zostało w mniejszym lub większym stopniu przestarzałe. Jednak <u>znaczniki muszą być po prostu owinięte wewnątrz a, <p>aby działały.

Więc to powinno osiągnąć to, czego chcesz:

---
output:
  word_document:
    md_extensions: +raw_html-markdown_in_html_blocks
    pandoc_args: ['--lua-filter', 'read_html.lua']
---

<p><u>This text will be underlined.</u> This not anymore</p>

<u>But this will not.</u>

<p style="text-decoration: underline;">Neither will this.</p>

z plikiem read_html.luaw tym samym katalogu o następującej zawartości:

function RawBlock (raw)
  if raw.format:match 'html' and not FORMAT:match 'html' then
    return pandoc.read(raw.text, raw.format).blocks
  end
end
CyrusYip Oct 13 2020 at 20:25

Obejście problemu

RMarkdown jest oparty na Pandoc, a Pandoc's Markdown nie obsługuje natywnie podkreślenia. Podkreślenie w Markdown firmy Pandoc jest realizowane za pomocą tagu HTML <u>...</u>. Jednak <u>...</u>nie można go przekonwertować na podkreślony tekst w docx lub pdf (testowane z pandoc 2.10.1). Sposób obejścia problemu polega na zmodyfikowaniu stylu tekstu w programie MS Word.

  1. Wybierz substytut <u>...</u>, na przykład ***...***.

    ---
    output:
      word_document: default
    ---
    
    This is a regular paragraph.
    
    ***This paragraph is bold italic at first. It will be underlined later.***
    
  2. Połącz dokument Rmarkdown w docx

  3. Wymienić pogrubioną kursywą z tekstem podkreślenia w programie Word.

    • Naciśnij Ctrl + H.
    • Ustaw format tekstu w Format > Font.
      • Znajdź tekst pogrubioną kursywą .
      • Zastąp zwykłym podkreśleniem.
    • naciśnij Replace All
  4. Jeśli korzystałeś <u>...</u>, zamień je na ***...***.

    • Naciśnij Ctrl + F.

    • sprawdź opcję regex.

    • wymienić <u>(.+)<\/u>z ***$1***.

    • Naciśnij Allobok Replace.

    • Wróć do kroku 1 i kroku 2.

Rada

Zalecam trzymanie się natywnej składni Rmarkdown i Markdown firmy Pandoc. Chociaż składnia jest ograniczona, działa dobrze z różnymi formatami wyjściowymi. Ograniczona składnia to potęga Markdown! Jest tak prosty, że można go przekonwertować na wiele różnych formatów wyjściowych. Zalecam również przestrzeganie koncepcji oddzielenia treści i stylu . Oszczędza mi to wielokrotnego formatowania zawartości.