2017-09-20 4 views
1

Je suis en train d'écrire un papier avec Rmarkdown (exporté en PDF via LaTeX) et j'ai besoin de compter le nombre de mots dans le texte principal. Avec des documents LaTeX, j'utilise texcount de la ligne de commande, en spécifiant la section que je veux exclure du nombre de mots en utilisant les balises suivantes dans mon document tex:Exclure des sections du nombre de mots dans R Markdown

%TC:ignore 
The part that is to be ignored (e.g., Appendix) 
%TC:endignore 

Comment puis-je inclure des commentaires LaTeX dans mon dossier Rmd à éviter d'ajouter manuellement les lignes %TC dans mon fichier tex chaque fois que je le régénère?

Voici mon MWE .Rmd:

--- 
output: 
    pdf_document: 
    keep_tex: yes 
--- 

Words that I want to count. 

<!-- TC:ignore --> 
Words that I want to exclude but cannot, 
because the comments do not appear in the `.tex` file. 
<!-- TC:endignore --> 

%TC:ignore 
Other words that I want to exclude but this does not work either 
because `%` is not interpreted as \LaTeX comment. 
%TC:endignore 

#%TC:ignore 
Another attempt; it does not work because `#` is for sections, 
not comments. 
#%TC:endignore 

Une fois que je l'ai tricoté le fichier .RMD et que le fichier .tex de sortie, je taperiez:

texcount MWE.tex 

et la réponse devrait être 6 mots Merci!

MISE À JOUR 1:

Sur Twitter, @amesoudi a suggéré d'utiliser un rstudio add-in (WordCountAddIn) pour compter les mots dans mon document Rmd. Le complément est disponible ici https://github.com/benmarwick/wordcountaddin. Cependant, ceci n'est pas automatisé et il y a encore du pointage et du clic impliqués.

MISE À JOUR 2:
Une autre solution serait de

  • utiliser une expression spécifique pour identifier ce qui doit être, par exemple les commentaires LATEX LATEXCOMMENT%TC:ignore dans le fichier .Rmd,

  • un script qui supprime automatiquement les LATEXCOMMENT expressions du produit .tex document (par exemple sed)

Répondre

0

Plutôt que de faire un mot compter sur le fichier LaTex émis, nous pouvons En fait, utilisez simplement le fichier .Rmd directement.

Ce code est similaire dans son approche de la wordcountaddin vous avez mentionné, mais tout texte entre les balises <!---TC:ignore---> et <!---TC:endignore---> ne seront pas inclus dans le décompte:

library(stringr) 
library(tidyverse) 

RmdWords <- function(file) { 

    # Creates a string of text 
    file_string <- file %>% 
    readLines() %>% 
    paste0(collapse = " ") %>% 
    # Remove YAML header 
    str_replace_all("^<--- .*?--- ", "") %>%  
    str_replace_all("^--- .*?--- ", "") %>% 
    # Remove code 
    str_replace_all("```.*?```", "") %>% 
    str_replace_all("`.*?`", "") %>% 
    # Remove LaTeX 
    str_replace_all("[^\\\\]\\$\\$.*?[^\\\\]\\$\\$", "") %>% 
    str_replace_all("[^\\\\]\\$.*?[^\\\\]\\$", "") %>% 
    # Deletes text between tags 
    str_replace_all("TC:ignore.*?TC:endignore", "") %>% 
    str_replace_all("[[:punct:]]", " ") %>% 
    str_replace_all(" ", "") %>% 
    str_replace_all("<", "") %>% 
    str_replace_all(">", "") 

    # Save several different results 
    word_count <- str_count(file_string, "\\S+") 
    char_count <- str_replace_all(string = file_string, " ", "") %>% str_count() 

    return(list(num_words = word_count, num_char = char_count, word_list = file_string)) 
} 

La fonction retourne trois éléments dans la liste:

  • NUM_WORDS: le nombre de mots dans le fichier
  • num_char: le nombre de caractères
  • word_list: une liste de tous les mots dans le document

Si vous souhaitez afficher les résultats dans le rapport compilé, vous pouvez écrire le code r en ligne comme suit:

```{r} 
words <- RmdWords("MWE.Rmd") 
``` 
There are seven words with 34 characters. 

<!-- TC:ignore --> 
Words that I want to exclude but cannot, 
because the comments do not appear in the `.tex` file. 
<!-- TC:endignore --> 

<!-- TC:ignore --> 
Word Count: `r words$num_words` \newline 
Character Count: `r words$num_char` 
<!-- TC:endignore --> 

enter image description here

note: certains de l'origine le script al a été adapté de http://www.questionflow.org/2017/10/13/how-to-scrape-pdf-and-rmd-to-get-inspiration/