summaryrefslogtreecommitdiff
path: root/support/latexmk/example_rcfiles/asymptote_latexmkrc
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/latexmk/example_rcfiles/asymptote_latexmkrc
Initial commit
Diffstat (limited to 'support/latexmk/example_rcfiles/asymptote_latexmkrc')
-rw-r--r--support/latexmk/example_rcfiles/asymptote_latexmkrc76
1 files changed, 76 insertions, 0 deletions
diff --git a/support/latexmk/example_rcfiles/asymptote_latexmkrc b/support/latexmk/example_rcfiles/asymptote_latexmkrc
new file mode 100644
index 0000000000..45f32979d0
--- /dev/null
+++ b/support/latexmk/example_rcfiles/asymptote_latexmkrc
@@ -0,0 +1,76 @@
+# This shows how to use Asymptote (http://asymptote.sourceforge.net/,
+# or http://www.ctan.org/pkg/asymptote/)
+# with latexmk. Asymptote is a vector graphics language with a
+# processing program that generates graphics files that can be used in
+# a LaTex file.
+#
+# A standard method of using it is with the asymptote LaTeX style file
+# (http://mirror.ctan.org/graphics/asymptote/doc/asymptote.sty)
+# The graphics drawing code is in the tex file, and applying pdflatex to
+# the tex file produces one or more files with a base name the same as
+# or related to the main tex file, but with the extension 'asy'. The
+# .asy is processed by the program asy (part of the asymptote
+# software) to produce graphics files (which may be eps, tex, or pdf
+# files) that are used the next time pdflatex is run on the main tex
+# file.
+#
+# Latexmk can be arranged to run asymptote (i.e., the program asy)
+# when needed, by defining the following custom dependency. (The code
+# is to be put in one of latexmk's rc files, e.g., ~/.latexmkrc.)
+#
+
+## OLD simple method (taken from the documentation for V. 2.03 of
+## asymptote). These definitions are simple, but they may not always
+## give the desired type of output file, and they do not ensure that
+## latexmk has dependency information about files imported from the
+## asy file.
+#OLD sub asy {return system("asy \"$_[0]\"");}
+#OLD add_cus_dep("asy","eps",0,"asy");
+#OLD add_cus_dep("asy","pdf",0,"asy");
+#OLD add_cus_dep("asy","tex",0,"asy");
+
+
+# The following definitions arrange to run asy with the correct output
+# file type. They run asy in a verbose mode so that dependency
+# information on imported files can be extracted. To avoid adding a
+# lot of extra printout on the screen of unimportant messages, the
+# output is sent to a log file. Since this includes error messages,
+# which the user should see, latexmk types out error messages and the
+# like. These definitions need latexmk 4.48 or later.
+
+add_cus_dep("asy","eps",0,"asy2eps");
+add_cus_dep("asy","pdf",0,"asy2pdf");
+add_cus_dep("asy","tex",0,"asy2tex");
+
+sub asy2eps { return asy2x( $_[0], 'eps' ); }
+sub asy2pdf { return asy2x( $_[0], 'pdf' ); }
+sub asy2tex { return asy2x( $_[0], 'tex' ); }
+
+sub asy2x {
+ my $ret = system("asy -vv -f '$_[1]' '$_[0]' >& '$_[0].log'");
+ my $FH = new FileHandle;
+ open $FH, "$_[0].log";
+ %imp = ();
+
+ while (<$FH>) {
+ if (/^(Including|Loading) .* from (.*)\s*$/) {
+ my $import = $2;
+ $imp{$import} = 1;
+ }
+ elsif ( /^error/ || /^.*\.asy: \d/ ) {
+ warn "==Message from asy: $_";
+ $ret = 1;
+ }
+ elsif ( /^kpsewhich / || /^Processing / || /^Using /
+ || /^Welcome / || /^Wrote /|| /^cd /|| /^gs /
+ ) {
+ }
+ else {
+ warn "==Message from asy: $_";
+ }
+ }
+ close $FH;
+# For latexmk 4.48
+ rdb_set_source( $rule, keys %imp );
+ return $ret;
+}