summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2020-12-31 23:43:42 +0530
committerArun Isaac2022-10-01 01:11:16 +0530
commit6014a6770fcd966fa58f6b9e96c306f5a1f477ee (patch)
treeae3d119d38fd9ff6361a55085ce38736193c48b0
parentd4bcb32a3ef029e9897b6467ff1c4b8f1640c4c7 (diff)
downloadksh-reports-6014a6770fcd966fa58f6b9e96c306f5a1f477ee.tar.gz
ksh-reports-6014a6770fcd966fa58f6b9e96c306f5a1f477ee.tar.lz
ksh-reports-6014a6770fcd966fa58f6b9e96c306f5a1f477ee.zip
Use tikz to draw biometry.
* ksh-report.el (draw-biometry, make-temp-script, combine-pdfs,
crop-pdf): Delete functions.
(biometry-subfloat, latex-macro): New functions.
(insert-biometry): Use tikz to draw biometry.
(make-report-header): Use subfig and tikz packages. Use calc tikz
library. Define tickheight, parameterheight and parameterageheight
macros.
* biometry.asy: Delete file.
-rw-r--r--biometry.asy38
-rw-r--r--ksh-report.el76
2 files changed, 37 insertions, 77 deletions
diff --git a/biometry.asy b/biometry.asy
deleted file mode 100644
index 294c212..0000000
--- a/biometry.asy
+++ /dev/null
@@ -1,38 +0,0 @@
-pair pair_ratio(pair a, pair b, real fraction) {
-     return a + (b - a)*fraction;
-}
-real real_ratio(real a, real b, real fraction) {
-     return a + (b - a)*fraction;
-}
-void draw_tic(pair a, pair b, real fraction, real tic_height, bool label) {
-     pair pt1 = pair_ratio(a, b, fraction);
-     pair pt2 = pt1 - (0, tic_height);
-     draw(pt1 -- pt2);
-     if (label) {
-     	label(format("%f\%", fraction*100), pt2, S);
-     }
-}
-void draw_marker(pair a, pair b, real value, real marker_height) {
-     pair markpt = pair_ratio(a, b, value);
-     pair pt = (markpt.x, markpt.y + marker_height);
-     label("*", pt);
-}
-void draw_scale(pair a, pair b, real value, real tic_height) {
-     draw(pair_ratio(a, b, 0) -- pair_ratio(a, b, 1));
-     draw_tic(a, b, 0.05, tic_height, true);
-     draw_tic(a, b, 0.5, tic_height, true);
-     draw_tic(a, b, 0.95, tic_height, true);
-     draw_tic(a, b, 0.25, 0.5*tic_height, false);
-     draw_tic(a, b, 0.75, 0.5*tic_height, false);
-     draw_marker(a, b, value, 0.5*tic_height);
-}
-void draw_biometry(string param, string param_age, real percentile) {
-     real width = 100;
-     real height = 75;
-
-     label(param, (width/2, 2*height/3), N);
-     label(param_age, (width/2, 2*height/3), S);
-     pair scale1 = (0.1*width, 0.25*height);
-     pair scale2 = (0.9*width, 0.25*height);
-     draw_scale(scale1, scale2, percentile/100, 0.1*height);
-}
\ No newline at end of file
diff --git a/ksh-report.el b/ksh-report.el
index 722e4f6..ac31a62 100644
--- a/ksh-report.el
+++ b/ksh-report.el
@@ -1,53 +1,45 @@
 (require 'seq)
 
-(defun draw-biometry (param-name param param-age percentile)
-  (let ((temp-script-file (make-temp-script
-			   (format "%s %s" param-name param)
-			   param-age (string-to-number percentile))))
-    (message "Drawing %s..." temp-script-file)
-    (shell-command
-     (format "asy -f pdf -o %s %s" (file-name-directory temp-script-file) temp-script-file))
-    (delete-file temp-script-file)
-    (format "%s.pdf" temp-script-file)))
 
-(defun make-temp-script (param param-age percentile)
-  (let ((temp-script-file (make-temp-file "biometry")))
-    (with-temp-file temp-script-file
-      (insert "include \"biometry\";\n")
-      (insert (format
-	       "draw_biometry(\"%s\", \"%s\", %d);"
-	       param param-age percentile)))
-    temp-script-file))
+(defun biometry-subfloat (param-name param param-age percentile)
+  (format
+   "\\subfloat {
+    \\begin{tikzpicture}
+      \\coordinate (O) at (0,0);
+      \\coordinate (A) at (2,0);
+      \\coordinate (B) at ($0.5*(A)$);
+      \\draw (O) -- (A);
+      \\draw ($(O) + 0.05*(A)$) -- +(0,-\\tickheight) node [below] {5\\%%};
+      \\draw ($(O) + 0.25*(A)$) -- +($0.5*(0,-\\tickheight)$);
+      \\draw ($(O) + 0.5*(A)$) -- +(0,-\\tickheight) node [below] {50\\%%};
+      \\draw ($(O) + 0.75*(A)$) -- +($0.5*(0,-\\tickheight)$);
+      \\draw ($(O) + 0.95*(A)$) -- +(0,-\\tickheight) node [below] {95\\%%};
+      \\node [above] at ($(O) + %s*0.01*(A)$) {*};
+      \\node at ($0.5*(A) + (0,\\parameterheight)$) {%s %s};
+      \\node at ($0.5*(A) + (0,\\parameterageheight)$) {%s};
+    \\end{tikzpicture}
+  }
+" percentile param-name param param-age))
 
 (defun insert-biometry (readings)
-  (princ
-   (format "[[%s]]\n"
-	   (crop-pdf
-	    (combine-pdfs
-	     (mapcar (lambda (reading)
-		       (apply 'draw-biometry
-			      (mapcar 'get-field reading)))
-                     readings))))))
-
-(defun combine-pdfs (pdfs)
-  (let ((temp-combination (make-temp-file "pdfjam" nil ".pdf")))
-    (apply 'call-process "pdfjam" nil nil nil
-	   "--nup" "4x1"
-	   "--outfile" temp-combination pdfs)
-    (mapc 'delete-file pdfs)
-    temp-combination))
-
-(defun crop-pdf (pdf)
-  (message "Cropping %s..." pdf)
-  (let ((output-pdf (format "%s-crop.pdf" (file-name-sans-extension pdf))))
-    (shell-command (format "pdfcrop %s %s" pdf output-pdf))
-    (delete-file pdf) output-pdf))
+  (princ "#+BEGIN_EXPORT latex\n")
+  (princ "\\begin{figure}\n")
+  (princ "\\centering\n")
+  (seq-do (lambda (reading)
+            (princ (apply 'biometry-subfloat
+                          (seq-map 'get-field reading))))
+          readings)
+  (princ "\\end{figure}\n")
+  (princ "#+END_EXPORT\n"))
 
 (defun latex-use-package (package &optional arguments)
   (if arguments
       (format "\\usepackage[%s]{%s}" arguments package)
     (format "\\usepackage{%s}" package)))
 
+(defun latex-macro (name value)
+  (format "\\newcommand{\\%s}{%s}" name value))
+
 (defun make-report-header (title)
   (seq-do 'ksh-forms-org-keyword
           '(("TITLE" . "Kuzhanthai Sanjeevi Hospital")
@@ -56,7 +48,13 @@
           (list (latex-use-package "fullpage")
                 (latex-use-package "nopageno")
                 (latex-use-package "datetime" "ddmmyyyy")
+                (latex-use-package "subfig")
+                (latex-use-package "tikz")
+                "\\usetikzlibrary{calc}"
                 "\\renewcommand{\\dateseparator}{-}"
+                (latex-macro "tickheight" "0.3")
+                (latex-macro "parameterheight" "1")
+                (latex-macro "parameterageheight" "0.6")
                 "\\setlength{\\parindent}{0cm}"
                 (latex-use-package "titlesec" "tiny")
                 (latex-use-package "wasysym")