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