Dans le cadre de mes recherches de fin d'études, rédigez un Rakefile pour créer le PDF utilisé en laboratoire sous la forme d'un runbook.
Un programme qui clarifie la procédure et progresse pas à pas. Vous pouvez écrire l'automatisation étape par étape comme l'un des DSL de Ruby.
Pour un débutant comme moi qui n'est pas encore habitué à utiliser CUI, l'exécution de Rakefile se déroulera sans autorisation et vous ne saurez pas ce que vous faites. Par conséquent, en utilisant le Runbook, la procédure devient claire et vous pouvez comprendre ce que vous faites. De plus, avec Rakefile, il est difficile si vous n'écrivez pas dans le programme depuis le début de s'arrêter même si vous pensez que quelque chose ne va pas pendant l'exécution, mais avec Runbook, vous pouvez choisir de continuer à demander à l'utilisateur une entrée à chaque fois dans une procédure finement divisée. Vous pouvez.
Le programme de base est un programme composé d'un titre, d'une section et d'une étape, et le programme est écrit dans l'étape. Il existe un modèle pour démarrer dans la commande du runbook, alors installez-le et vérifiez les bases du runbook.
> runbook generate runbook my_first_runbook
Cela générera my_first_runbook.rb dans le répertoire.
my_first_runbook.rb
require "runbook"
runbook = Runbook.book "My First Runbook" do
  description <<-DESC                                                           
This is a runbook that...                                                       
  DESC
  section "SECTION" do
    step "STEP" do
      # Add statements here                                                     
    end
  end
end
if __FILE__ == $0
  Runbook::Runner.new(runbook).run
else
  runbook
end
Lorsque vous l'exécutez, il vous sera demandé si vous souhaitez continuer comme indiqué dans la figure ci-dessous.
> runbook exec my_first_runbook.rb 
Executing My First Runbook...
Description:
This is a runbook that...
Section 1: SECTION
Step 1.1: STEP
Continue? (enter "h" for help) [c,s,j,P,e,h] 
> runbook exec my_first_runbook.rb 
Executing My First Runbook...
Description:
This is a runbook that...
Section 1: SECTION
Step 1.1: STEP
Continue? (enter "h" for help) [c,s,j,P,e,h] c
>> Continue to execute this step
> runbook exec my_first_runbook.rb 
Executing My First Runbook...
Description:
This is a runbook that...
Section 1: SECTION
Step 1.1: STEP
Continue? Continue to execute this step
La structure du Rakefile utilisé dans le laboratoire est principalement --Lecture des fichiers org --Convertir en latex
Puisqu'il y en a quatre, écrivez un runbook avec ces étapes.
make_pdf.rb
Runbook.book "Make PDF" do
  description <<-DESC                                                           
    This is a make PDF from org                                                 
  DESC
  section "Make pdf" do
    step "Load org file" 
    step "Make tex file" 
    step "Load and Convert tex file" 
    step "Make pdf" 
  end
end
Résultat d'exécution
> runbook exec make_pdf.rb
Executing Make PDF...
Description:
    This is a make PDF from org
Section 1: Make pdf
Step 1.1: Load org file
Continue? Continue to execute this step
Step 1.2: Make tex file
Continue? Continue to execute this step
Step 1.3: Load and Convert tex file
Continue? Continue to execute this step
Step 1.4: Make pdf
Maintenant que nous avons un modèle, nous allons y ajouter le contenu.
J'ai pensé qu'il serait plus facile d'arrêter en divisant la section en une section qui crée du latex et une qui se convertit en PDF, alors faites-le et ajoutez le contenu.
make_pdf.rb
require "./convert"
require "colorize"
Runbook.book "Make PDF" do
  description <<-DESC
    This is a make PDF from org
  DESC
  section "Make latex" do
    $t_file = "report"
    step "Load org file" do
      note "Load org file"
      ruby_command do
        $file = Dir.glob("*.org")[0].match(/(.*).org/)[1]
        puts "your org file is " + $file.red + "."
      end
    end
    step "Make tex file" do
      note "Make tex file"
      ruby_command do
        system "emacs #{$file}.org --batch -f org-latex-export-to-latex --kill"
      end
    end
    step "Load and Convert tex file" do
      ruby_command do
        $lines = File.readlines("#{$file}.tex")
        $lines = convert_thesis($lines)
        File.open("#{$t_file}.tex", "w") do |f|
        $lines.each { |line| f.print line }
      end
    end
  end
  section "Make PDF" do
    step "Make pdf" do
      note "Make pdf"
      ruby_command do
        commands = ["platex #{$t_file}.tex",
                    "bibtex #{$t_file}.tex",
                    "platex #{$t_file}.tex",
                    "dvipdfmx #{$t_file}.dvi"]
        commands.each { |com| system com }
      end
    end
  end
end
Vous avez maintenant un programme runbook qui lit le fichier org dans le répertoire avec "Load org file", le convertit en latex et crée un PDF.
--convert.rb est un programme pour utiliser la fonction de convert_thesis utilisée dans "Charger et convertir un fichier tex". Le contenu consiste à convertir le latex créé à partir de l'organisation en un modèle de rapport.
convert.rb
def convert_thesis(lines)
  head = <<'EOS'
  \documentclass[a4j,twocolumn]{jsarticle}
  \usepackage[dvipdfmx]{graphicx}
  \usepackage{url}
  \setlength{\textheight}{275mm}
  \headheight 5mm
  \topmargin -30mm
  \textwidth 185mm
  \oddsidemargin -15mm
  \evensidemargin -15mm
  \pagestyle{empty}
  \begin{document} 
  \title{}
  \author{département\hspace{5mm}Numéro d'étudiant\hspace{5mm} your name}
  \date{}
  \maketitle
EOS
  head2 = <<'EOS'
  {\small\setlength\baselineskip{15pt}	%Les références sont des interlignes avec des lettres plus petites
  \begin{thebibliography}{9}
  \bibitem{} 
  \end{thebibliography}
  }
  \end{document}
EOS
  new_line = [head]
  lines[31..-1].each do |line|
    new_line << line
  end
  new_line.each do |line|
    line.gsub!('\end{document}', head2)
    line.gsub!('\tableofcontents', "")
  end
  return new_line
end
Vous permet de sélectionner l'organisation dans "Charger le fichier org".
make_pdf.rb
require "./convert"
require "colorize"
Runbook.book "Make PDF" do
...
$t_file = "report"
    step "Load org file" do
      note "Load org file"
      ruby_command do
        str = Dir.glob("*.org")
        str.each do |name|
          puts "your org file is " + name.red + " ? (y or n)"
          res = $stdin.gets.chomp
          if res == "y"
            $file = name.match(/(.*).org/)[1]
            break
          elsif res == "n"
            if name == str[str.size - 1]
              puts "This directory not have the objective file".red
              exit
            end
          end
        end
      end
    end
...
end
Le nom du fichier org est affiché sous forme de message sur le terminal, et vous pouvez le sélectionner en entrant "y" ou "n". Si tous sont "n", il sera interrompu de force.
Ensuite, à la toute fin, j'ai créé "Déplacer le rapport" et déplacé le rapport créé vers un répertoire appelé rapport.
make_pdf.rb
require "./convert"
require "colorize"
Runbook.book "Make PDF" do
...
section "Make PDF" do
    step "Make pdf" do
...
    step "Move report" do
      note "Move report"
      ruby_command do
        commands = ["mkdir report",
                    "mv -f #{$t_file}.* ./report",
                    "open ./report/#{$t_file}.pdf"]
        commands.each { |com| system com }
      end
    end
  end
end
--Il a été souligné que vous devez enquêter et confirmer s'il existe un moyen de tout faire sans interruption sans entrer.
Il y avait une description dans le manuel dans Github of gem runbook.
> runbook exec --auto my_runbook.rb
Si vous l'exécutez avec ceci, vous pouvez l'exécuter jusqu'à la fin sans entrée.
Installer avec gem. Gem install runbook
Si vous faites runbook exec runbook.rb, runbook.rb sera exécuté.
--runbook.rb est votre programme.
--Peut être exécuté dans n'importe quel répertoire si vous connaissez le chemin de l'emplacement du programme