summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.gitignore12
-rw-r--r--.gitmodules3
-rw-r--r--Makefile3898
m---------bib0
-rw-r--r--cv.tex76
-rw-r--r--section_academic.tex15
-rw-r--r--section_competences.tex10
-rw-r--r--section_education.tex6
-rw-r--r--section_employment.tex11
-rw-r--r--section_experiments.tex30
-rw-r--r--section_funding.tex33
-rw-r--r--section_leadership.tex16
-rw-r--r--section_presentations.tex61
-rw-r--r--section_research.tex61
-rw-r--r--section_responsibilities.tex31
-rw-r--r--section_skills.tex11
-rw-r--r--section_software.tex39
-rw-r--r--section_supervision.tex20
-rw-r--r--xetex-inputenc.sty83
l---------[-rwxr-xr-x]yaac-another-awesome-cv.cls542
-rwxr-xr-xyaac-another-awesome-cv/LICENSE (renamed from LICENSE)0
-rw-r--r--yaac-another-awesome-cv/PULL_REQUEST_TEMPLATE.md (renamed from PULL_REQUEST_TEMPLATE.md)0
-rwxr-xr-xyaac-another-awesome-cv/README.md (renamed from README.md)0
-rw-r--r--yaac-another-awesome-cv/example/cr.png (renamed from example/cr.png)bin1189993 -> 1189993 bytes
-rw-r--r--yaac-another-awesome-cv/example/cv.bcf (renamed from example/cv.bcf)0
-rw-r--r--yaac-another-awesome-cv/example/cv.run.xml (renamed from example/cv.run.xml)0
-rwxr-xr-xyaac-another-awesome-cv/example/cv.tex (renamed from example/cv.tex)0
-rw-r--r--yaac-another-awesome-cv/example/darwiin.png (renamed from example/darwiin.png)bin12121 -> 12121 bytes
l---------yaac-another-awesome-cv/example/fonts (renamed from example/fonts)0
-rw-r--r--yaac-another-awesome-cv/example/preview/cv1-alternative.jpeg (renamed from example/preview/cv1-alternative.jpeg)bin249336 -> 249336 bytes
-rw-r--r--yaac-another-awesome-cv/example/preview/cv1.jpeg (renamed from example/preview/cv1.jpeg)bin234285 -> 234285 bytes
-rw-r--r--yaac-another-awesome-cv/example/preview/cv2-alternative.jpeg (renamed from example/preview/cv2-alternative.jpeg)bin216611 -> 216611 bytes
-rw-r--r--yaac-another-awesome-cv/example/preview/cv2.jpeg (renamed from example/preview/cv2.jpeg)bin210256 -> 210256 bytes
-rw-r--r--yaac-another-awesome-cv/example/sample.bib (renamed from example/sample.bib)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_competences.tex (renamed from example/section_competences.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_experience.tex (renamed from example/section_experience.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_experience_short.tex (renamed from example/section_experience_short.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_headline.tex (renamed from example/section_headline.tex)0
-rw-r--r--yaac-another-awesome-cv/example/section_headline_archi.tex (renamed from example/section_headline_archi.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_interets.tex (renamed from example/section_interets.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_langues.tex (renamed from example/section_langues.tex)0
-rw-r--r--yaac-another-awesome-cv/example/section_projets.tex (renamed from example/section_projets.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_references.tex (renamed from example/section_references.tex)0
-rwxr-xr-xyaac-another-awesome-cv/example/section_scolarite.tex (renamed from example/section_scolarite.tex)0
l---------yaac-another-awesome-cv/example/yaac-another-awesome-cv.cls (renamed from example/yaac-another-awesome-cv.cls)0
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-Black.otf (renamed from fonts/SourceSansPro-Black.otf)bin234176 -> 234176 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-BlackIt.otf (renamed from fonts/SourceSansPro-BlackIt.otf)bin81120 -> 81120 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-Bold.otf (renamed from fonts/SourceSansPro-Bold.otf)bin235128 -> 235128 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-BoldIt.otf (renamed from fonts/SourceSansPro-BoldIt.otf)bin80392 -> 80392 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-ExtraLight.otf (renamed from fonts/SourceSansPro-ExtraLight.otf)bin221580 -> 221580 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-ExtraLightIt.otf (renamed from fonts/SourceSansPro-ExtraLightIt.otf)bin76400 -> 76400 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-It.otf (renamed from fonts/SourceSansPro-It.otf)bin79724 -> 79724 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-Light.otf (renamed from fonts/SourceSansPro-Light.otf)bin226032 -> 226032 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-LightIt.otf (renamed from fonts/SourceSansPro-LightIt.otf)bin77816 -> 77816 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-Regular.otf (renamed from fonts/SourceSansPro-Regular.otf)bin229588 -> 229588 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-Semibold.otf (renamed from fonts/SourceSansPro-Semibold.otf)bin232680 -> 232680 bytes
-rwxr-xr-xyaac-another-awesome-cv/fonts/SourceSansPro-SemiboldIt.otf (renamed from fonts/SourceSansPro-SemiboldIt.otf)bin80316 -> 80316 bytes
-rw-r--r--yaac-another-awesome-cv/yaac-another-awesome-cv.cls864
58 files changed, 5277 insertions, 545 deletions
diff --git a/.gitignore b/.gitignore
index b126971..bd25ff2 100755
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
+*.make
+*.temp
+*.d
+*.bcf
*.acn
*.acr
*.alg
@@ -30,10 +34,10 @@
*.vrb
*.xdy
*.tdo
-*.pdf
-cv.fls
-cv.texnicle
-cv.texnicle.backup
+cv*.run.xml
+cv*.fls
+cv*.texnicle
+cv*.texnicle.backup
.DS_Store
latex-classicalcv.sublime-project
latex-classicalcv.sublime-workspace
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..add994e
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "bib"]
+ path = bib
+ url = ssh://darksoft.org/repo/git/csa/papers/bib.git
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3a5afcf
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,3898 @@
+# Copyright 2004 Chris Monson (shiblon@gmail.com)
+# Latest version available at http://www.bouncingchairs.net/oss
+#
+# This file is part of ``Chris Monson's Free Software''.
+#
+# ``Chris Monson's Free Software'' is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, Version 2.
+#
+# ``Chris Monson's Free Software'' is distributed in the hope that it will
+# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with ``Chris Monson's Free Software''; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# It is also available on the web at http://www.gnu.org/copyleft/gpl.html
+#
+# Note that using this makefile to build your documents does NOT place them
+# under the GPL unless you, the author, specifically do so. In other words,
+# I, Chris Monson, the copyright holder and author of this makefile,
+# consider it impossible to ``link'' to this makefile in any way covered by
+# the GPL.
+#
+#
+# TO OBTAIN INSTRUCTIONS FOR USING THIS FILE, RUN:
+# make help
+#
+fileinfo := LaTeX Makefile
+author := Chris Monson
+version := 2.2.0
+#
+.DEFAULT_GOAL := all
+# Note that the user-global version is imported *after* the source directory,
+# so that you can use stuff like ?= to get proper override behavior.
+.PHONY: Makefile GNUmakefile Makefile.ini $(HOME)/.latex-makefile/Makefile.ini
+-include Makefile.ini
+-include $(HOME)/.latex-makefile/Makefile.ini
+# Better names for these things
+.PHONY: Variables.ini $(HOME)/.latex-makefile/Variables.ini
+-include Variables.ini
+-include $(HOME)/.latex-makefile/Variables.ini
+#
+# This can be pdflatex or latex - you can change this by adding the following line to your Makefile.ini:
+# BUILD_STRATEGY := latex
+#BUILD_STRATEGY ?= pdflatex
+BUILD_STRATEGY ?= xelatex
+#
+# Sets LC_ALL=C, by default, so that the locale-aware tools, like sort, be
+# # immune to changes to the locale in the user environment.
+export LC_ALL ?= C
+#
+#
+# If you specify sources here, all other files with the same suffix
+# will be treated as if they were _include_ files.
+#onlysources.tex ?= paper.tex transact.tex
+onlysources.tex ?= cv.tex
+#onlysources.tex ?= transact.tex
+#onlysources.tex ?= paper-diff.tex
+#onlysources.tex ?= transact-diff.tex
+
+#onlysources.tex.sh ?=
+#onlysources.tex.pl ?=
+#onlysources.tex.py ?=
+#onlysources.rst ?=
+#onlysources.fig ?=
+#onlysources.gpi ?=
+#onlysources.dot ?=
+#onlysources.xvg ?=
+#onlysources.svg ?=
+#onlysources.eps.gz ?=
+#onlysources.eps ?=
+#
+# If you list files here, they will be treated as _include_ files
+#includes.tex ?= file1.tex file2.tex
+#includes.tex.sh ?=
+#includes.tex.pl ?=
+#includes.tex.py ?=
+#includes.rst ?=
+#includes.fig ?=
+#includes.gpi ?=
+#includes.dot ?=
+#includes.xvg ?=
+#includes.svg ?=
+#includes.eps.gz ?=
+#includes.eps ?=
+#
+# If you list files or wildcards here, they will *not* be cleaned - default is
+# to allow everything to be cleaned.
+#neverclean ?= *.pdf
+#
+# Alternatively (recommended), you can add those lines to a Makefile.ini file
+# and it will get picked up automatically without your having to edit this
+# Makefile.
+#
+# KNOWN ISSUES:
+# * The following occurs:
+# file with: \usepackage{named}\bibliographystyle{named}
+# Compile
+# change to: \usepackage{apalike}\bibliographystyle{apalike}
+# Compile again -- BARF!
+#
+# The workaround: make clean-nographics; make
+#
+# Note that we may not be able to fix this. LaTeX itself barfs
+# on this, not the makefile. The very first invocation of LaTeX
+# (when something like this has happened) reads the existing .aux
+# file and discovers invalid commands like \citeauthoryear that
+# are only valid in the package that was just removed. It then
+# tries to parse them and explodes. It's not at all clear to me
+# how to fix this. I tried removing the .aux files on the first
+# run of LaTeX, but that necessarily requires more subsequent
+# rebuilds on common edits. There does not appear to be a
+# graceful solution to this issue.
+#
+#
+# CHANGES:
+# Chris Monson (2011-05-20):
+# * Bumped version to 2.2.0 (release!)
+# Chris Monson (2011-05-19):
+# * Bumped version to 2.2.0-rc15
+# * Issue 125: infinite recursion with nomenclature files
+# * Issue 125: removed .d as a target for .nls in get-log-index
+# * Cleaned up invocation of run-makeindex to take an optional .ist instead of flags.
+# Chris Monson (2011-04-06):
+# * Bumped version to 2.2.0-rc14
+# * Issue 121: Added Targets.ini and corresponding help text for it.
+# * Issue 121: Added Variables.ini (Makefile.ini still works, though).
+# * Issue 121: Added .DEFAULT_GOAL optional setting.
+# * Issue 120: xindy compatibility
+# Chris Monson (2011-03-16):
+# * Bumped version to 2.2.0-rc13
+# * Fixed a bug in kspewhich invocation - random characters and a missing pipe.
+# * Added font embedding to gnuplot output.
+# Chris Monson (2011-03-15):
+# * Bumped version to 2.2.0-rc12
+# * Issue 119: Annoying warning from which if Gnuplot not installed.
+# * Fixed catchall error output to show more info from the log. Cutting off the
+# first line is too jarring.
+# * Issue 118: Better glossary support
+# Chris Monson (2011-03-03):
+# * Bumped version to 2.2.0-rc11
+# * Issue 112: Fixed regression introduced by use of cygpath (ugly warnings)
+# Chris Monson (2011-02-03):
+# * Bumped version to 2.2.0-rc10
+# * Issue 112: Added path normalization for cygwin systems
+# * Fixed a bug in get-missing-inputs where we weren't specifying target files
+# Chris Monson (2011-01-24):
+# * Issue 111: Added .jpeg as a possible image extension
+# Chris Monson (2011-01-21):
+# * Issue 110: Long filenames not produced correctly in .d file
+# * Fixed problem with unknown control sequence error parsing
+# * Fixed problem with \r in fatal output (was interpreted as LF by echo)
+# * Removed a spurious "hi"
+# Chris Monson (2011-01-14):
+# * Bumped version to 2.2.0-rc8
+# * Issue 107: Removed comment with embedded newline, fixing MinGW on Windows 7.
+# Chris Monson (2011-01-07):
+# * Emit an error if .gpi.d files have dependencies with : in the name
+# Chris Monson (2011-01-05):
+# * Bumped version to 2.2.0-rc7
+# * Issue 106: existing graphic dependencies not generated correctly
+# Chris Monson (2011-01-04):
+# * Issue 106: not cleaning eps log files properly
+# * Issue 106: not rebuilding after creating .pdf graphics from .eps
+# * Issue 94: svg going unnecessarily through eps (can't reproduce)
+# Chris Monson (2010-12-31):
+# * Issue 100: make hanging because of faulty graphics detection (sed bug)
+# * Issue 108: do not ignore fatal errors from pdftex
+# Chris Monson (2010-12-23):
+# * Added gpi_global to gnuplot dependencies so that changes are detected
+# Chris Monson (2010-12-20):
+# * Updated build file to be smarter about Python version detection
+# * Created a bunch of test files and supporting scripts
+# * Issue 72: added apacite capaability (thanks to matkarat)
+# Chris Monson (2010-11-23):
+# * Changed to multi-part makefile build (split out sed scripts)
+# * Added build script and supporting infrastructure
+# * Updated test directory format
+# * Added notes about needed test cases
+# * Changed to use -file-line-error and fixed multiple inclusion/error bugs
+# * Added run_sed.py to allow easy testing of sed scripts outside of make
+# Chris Monson (2010-11-11):
+# * Bumped version to 2.2.0-rc7
+# * issue 92: broken hyperref driver detection fixed
+# * issue 101: Broken inkscape conversion
+# * issue 102: Broken specification of font size for gnuplot pdfcairo
+# * Added KEEP_TEMP so that we can avoid deleting useful temporaries for debugging
+# * Restructured gnuplot code to be easier to follow
+# * Fixed a bug in convert-gpi where we were using $< instead of $1
+# Chris Monson (2010-11-03):
+# * Bumped version to 2.2.0-rc6
+# * issue 96: Fix sed errors when using make variables in substitutions
+# Chris Monson (2010-07-28):
+# * Bumped version to 2.2.0-rc5 (rc4 is broken)
+# * Bail out when we find the use of the import.sty package
+# * Issue 90: Add -z to dvips invocation
+# * Issue 67: Add xelatex support (thanks to Nikolai Prokoschenko for the patch!)
+# * Issue 85: Add warning about make 3.80
+# Chris Monson (2010-06-20):
+# * Bumped version to 2.2.0-rc3
+# * Attempt to fix bug with ! error detection (issue 88)
+# * Added svg->pdf direct support (issue 89)
+# Chris Monson (2010-04-28):
+# * Bumped version to 2.2.0-rc2
+# * Fixed %._show target
+# Chris Monson (2010-04-08):
+# * Bumped version to 2.2.0-rc1
+# * Added back in the rst_style_file stuff that got broken when switching
+# rst -> tex to use the script mechanism
+# Chris Monson (2010-03-23):
+# * Bumped version to 2.2.0-beta8
+# * Work on issue 76: bad backtick escape for some sed versions, failure
+# to clear out the hold buffer when outputting MISSING comment.
+# - Backed out 2>&1 to &> (doesn't work in sh)
+# - Backed out using . to source variables
+# Chris Monson (2010-03-22):
+# * Bumped version to 2.2.0-beta7
+# * Issue 72: Fix latex/bibtex invocation order for annotated bib styles
+# * Fixed informational output to reflect which LaTeX run we're on
+# * Fixed graphic detection to include graphics that are already there in
+# .d files
+# * Tightened up the .d file output to only make .d depend on graphic
+# *source* files. This means that building foo.d no longer
+# builds all of the graphics files on which foo.tex depends.
+# Had to use .SECONDEXPANSION trickery to make it work.
+# * Changed get-graphics to only accept a stem.
+# * Fixed build-once logic for scripted .tex to work better
+# * Made get-inputs sed script more maintainable.
+# * Moved Makefile.ini import up higher.
+# * Changed bare stems to not recursively invoke make
+# * Updated diff output to be more silent everywhere
+# * Added a MISSING comment to the .d file if stuff isn't found - forces
+# removal of .1st.make file, which often forces it to try again.
+# * Fixed broken graphics-target function
+# * Added sleep to .d file generation when stuff is missing - if it
+# builds too fast, make doesn't realize it needs to be reloaded,
+# and thus never discovers some deeper dependencies (especially
+# evident when graphics are included from scripted include
+# files).
+# Chris Monson (2010-03-17):
+# * Bumped version to 2.2.0-beta6
+# * Fixed bareword builds to actually work (requires static patterns)
+# * Fixed colorization to work with new paragraph stuff
+# Chris Monson (2010-03-17):
+# * Bumped version to 2.2.0-beta5
+# * Fixed graphic detection to be much more focused - splits log file
+# into paragraphs before doing pattern matching.
+# * Fixed make foo to work properly (recursively calls make foo.pdf)
+# * Fixed gpi -> pdf generation to not waste time building .eps *after*
+# the pdf already exists.
+# * Changed log copies to include MAKE_RESTARTS as part of the name.
+# * Fixed missing include file detection (also makes use of the paragraph
+# stuff) to detect missing scripted include files.
+# Chris Monson (2010-03-16):
+# * Bumped version to 2.2.0-beta4
+# * issue 70: .pdf not moved out of the way properly on first
+# compilation, resulting in early error detection failure.
+# * issue 74: fixed broken error on missing .aux files: the
+# implementation was masking real errors.
+# Chris Monson (2010-03-15):
+# * Bumped version to 2.2.0-beta3
+# * issue 71: Made the tput dependency optional
+# * issue 73: Made .tex targets not pull in .d files (building them from
+# scripts should not require a .d)
+# * issue 74: Output a much saner error when a .aux file is not produced
+# (e.g., when you are typing "make" without arguments in a
+# directory with included .tex files that are not named with
+# ._include_.)
+# Chris Monson (2010-03-11):
+# * Bumped version to 2.2.0-beta2
+# * Fixed clean-graphics to get rid of intermediate .eps files that may
+# be hanging around
+# * Added an automatic setting to use eps terminals in pdflatex mode for
+# gnuplot if it doesn't understand pdf.
+# * issue 66: Removed grayscale generation via magic suffix. Grayscale
+# generation is now only available via GRAY=1
+# * issue 68: Added explicit handling of LC_ALL for locale-aware tools
+# like "sort"
+# Chris Monson (2010-03-10):
+# * Bumped version to 2.2.0-beta1
+# * Fixed success message to handle output message in different places
+# * Added name of produced file to success message
+# Chris Monson (2010-03-10):
+# * Bumped version to 2.2.0-alpha3
+# * Added meaningful error message for wrong hyperref options
+# * Added meaningful error message for incorrect graphics extensions
+# Chris Monson (2010-03-09):
+# * Bumped version to 2.2.0-alpha2
+# * Updated graphics handling (gnuplot and fig generate pdf natively)
+# * Changed xmgrace to output monochrome natively
+# Chris Monson (2010-03-09):
+# * Bumped version to 2.2.0-alpha1 - major change!
+# * Support pdflatex natively and by default (issue 6 - a long time coming)
+# * Add ability to have a single $HOME/.latex-makefile/Makefile.ini for
+# all invocations
+# * Reworked graphic inclusion detection so that extensions need not be
+# specified for either build strategy (e.g.,
+# \includegraphics{test1.eps} -> \includegrahpics{test1})
+# * Changed log format to include filenames and line numbers
+# Chris Monson (2010-02-04):
+# * Bumped version to 2.1.43
+# * All of the following are for issue 63 (thanks to mojoh81):
+# * Added documentation about fixing Makefile.ini default target
+# * Added perl and python script targets
+# * Fixed run logic to allow included .tex files to be scripted (the
+# run-again logic now detects missing .tex files, and the MV
+# command has been switched out for a command that only invokes
+# MV if the files exist)
+# * Changed scripted generation to only run once per make invocation
+# * Added dependency on expr
+# Chris Monson (2010-01-19):
+# * Bumped version to 2.1.42
+# * issue 62: Added .brf extension to cleanable files (backrefs)
+# Chris Monson (2010-01-07):
+# * Bumped version to 2.1.41
+# * issue 60: bad makeindex runs now error out on subsequent tries
+# Chris Monson (2009-12-01):
+# * Bumped version to 2.1.40
+# * issue 36: build all indices (for e.g., splitidx usage)
+# * issue 59: clean up all generated files (including indices)
+# Chris Monson (2009-11-23):
+# * Bumped version to 2.1.39
+# * issue 57: change ps2pdf invocations to just use gs directly
+# Chris Monson (2009-11-19):
+# * Bumped version to 2.1.38
+# * issue 57: Added some limited support for Cygwin (spaces in filenames)
+# Chris Monson (2009-11-15):
+# * Bumped version to 2.1.37
+# * Removed svninfo, since this is now managed by mercurial
+# * Fixed typo in changelist
+# * Issue 52: added jpg->eps conversion (thanks to brubakee)
+# * Issue 54: fix missing Overfull colorization due to lack of a blank
+# line preceding the first error.
+# * Issue 51: remove head.tmp and body.tmp in make clean invocation
+# * Issue 56: maintain multiple versions of log files (for debugging)
+# Chris Monson (2009-11-14):
+# * Bumped version to 2.1.36
+# * Issues 53 and 49: added .brf, .mtc, and .maf to the cleanables
+# Chris Monson (2009-11-05):
+# * Bumped version to 2.1.35
+# * Added nomenclature support (see issue 48)
+# Chris Monson (2009-10-29):
+# * Bumped version to 2.1.34
+# * Fixed _out_ creation bug introduced in 2.1.33 (it was always created)
+# * Fixed erroneous help output for $HOME in BINARY_TARGET_DIR
+# * Changed contact email address - bring on the spam!
+# Chris Monson (2009-10-21):
+# * Bumped version to 2.1.33
+# * Fixed issue 46, adding support for dot2tex (thanks to fdemesmay)
+# * Made all_files.* settable in Makefile.ini (using ?= instead of :=)
+# * Fixed issue 47, thanks to fdemesmay: add binary copy directory, copy
+# dvi, pdf, and ps if it exists
+# Chris Monson (2009-09-25):
+# * Bumped version to 2.1.32
+# * Fixed so that a changed lol file will cause a rebuild
+# * Added .lol files to the cleanable list
+# Chris Monson (2009-09-08):
+# * Bumped version to 2.1.31
+# * Closed issue 43: evince doesn't notice pdf change w/out touch
+# Chris Monson (2009-08-28):
+# * Bumped version to 2.1.30
+# * Closed issue 39: Capture multi-line log warnings/errors to output
+# Chris Monson (2009-08-26):
+# * Bumped version to 2.1.29
+# * Closed issue 42: add svg support using inkscape
+# Chris Monson (2009-08-17):
+# * Bumped version to 2.1.28
+# * Patch from paul.biggar for issue 38: package warnings are overlooked
+# Chris Monson (2009-08-07):
+# * Bumped version to 2.1.27
+# * Included patch for issue 37 - removes pdf/ps files before copying,
+# allowing some broken viewers to see changes properly.
+# Chris Monson (2009-05-15):
+# * Bumped version to 2.1.26
+# * Included patch for issue 9 from favonia - detects .fig changes for
+# pstex files during regular compilation, so long as the pstex
+# has been built at least once with make all-pstex.
+# Chris Monson (2009-03-27):
+# * Bumped version to 2.1.25
+# * Cleaned up a bunch of variable setting stuff - more stuff is now
+# settable from Makefile.ini
+# * Cleaned up documentation for various features, especially settable
+# variables.
+# * issue 28: support for png -> eps conversion (it even looks good!)
+# * issue 29: support for "neverclean" files in Makefile.ini
+# * issue 30: make ps2pdf14 the default - fall back when not there
+# Chris Monson (2009-03-09):
+# * Bumped version to 2.1.24
+# * issue 27: xmgrace support (thanks to rolandschulzhd)
+# Chris Monson (2008-10-23):
+# * Bumped version to 2.1.23
+# * issue 23: fixed _check_programs to not use bash string subs
+# Chris Monson (2008-09-02):
+# * Bumped version to 2.1.22
+# * Appled patch from Holger <yllohy@googlemail.com> to add include
+# sources and some documentation updates.
+# * Updated backup_patterns to be a bit more aggressive (also thanks to
+# Holger)
+# Chris Monson (2008-08-30):
+# * Bumped version to 2.1.21
+# * Added ability to specify onlysources.* variables to indicate the only
+# files that should *not* be considered includes. Thanks to Holger
+# <yllohy@googlemail.com> for this patch.
+# * Added an automatic include of Makefile.ini if it exists. Allows
+# settings to be made outside of this makefile.
+# Chris Monson (2008-05-21):
+# * Bumped version to 2.1.20
+# * Added manual pstex compilation support (run make all-pstex first)
+# * Removed all automatic pstex support. It was totally breaking
+# everything and is very hard to incorporate into the makefile
+# concept because it requires LaTeX to *fail* before it can
+# determine that it needs the files.
+# Chris Monson (2008-04-17):
+# * Bumped version to 2.1.19
+# * Changed the pstex build hack to be on by default
+# Chris Monson (2008-04-09):
+# * Bumped version to 2.1.18
+# * issue 16: fixed pstex build problems, seems nondeterministic. Added
+# gratuitious hack for testing: set PSTEX_BUILD_ALL_HACK=1.
+# Chris Monson (2008-04-09):
+# * Bumped version to 2.1.17
+# * issue 20: fixed accumulation of <pid>*.make files - wildcard was
+# refusing to work on files that are very recently created.
+# Chris Monson (2008-04-02):
+# * Bumped version to 2.1.16
+# * issue 19: Removed the use of "type" to fix broken "echo" settings
+# Chris Monson (2008-03-27):
+# * Bumped version to 2.1.15
+# * issue 18: Favors binary echo over builtin, as binary understands -n
+# * issue 16: Fixed handling of missing pstex_t files in the log
+# * issue 9: Added .SECONDARY target for .pstex files
+# Chris Monson (2008-03-21):
+# * Bumped version to 2.1.14
+# * Fixed broken aux file flattening, which caused included bibs to be
+# missed.
+# Chris Monson (2008-03-20):
+# * Bumped version to 2.1.13
+# * Changed error output colorization to show errors for missing files
+# that are not graphics files.
+# Chris Monson (2008-03-20):
+# * Bumped version to 2.1.12
+# * Fixed a regression introduced in r28 that makes bibtex fail when
+# there is no index file present
+# Chris Monson (2008-03-03):
+# * Bumped version to 2.1.11
+# * Fixed issue 11 (handle index files, reported by abachn)
+# * Cleaned up some comments and help text
+# Chris Monson (2008-01-24):
+# * Bumped version to 2.1.10
+# * Fixed to work when 'sh' is a POSIX shell like 'dash'
+# Chris Monson (2007-12-12):
+# * Bumped version to 2.1.9
+# * Fixed documentation and dependency graph for pstex files
+# Chris Monson (2007-12-12):
+# * Bumped version to 2.1.8
+# * Added basic pstex_t support for fig files (Issue 9 by favonia)
+# I still suggest that psfrag be used instead.
+# Chris Monson (2007-10-16):
+# * Bumped version to 2.1.7
+# * Removed todo item: allow other comment directives for rst conversion
+# * Added ability to use global rst style file _rststyle_._include_.tex
+# * Added help text to that effect
+# Chris Monson (2007-05-20):
+# * Bumped version to 2.1.6
+# * Changed default paper size for rst files
+# * Added todo item: fix paper size for rst files
+# * Added todo item: allow other comment directives for rst conversion
+# Chris Monson (2007-04-02):
+# * Bumped version to 2.1.5
+# * Addressed Issue 7, incorrect .gpi.d generation in subdirectories
+# Chris Monson (2007-03-28):
+# * Bumped version to 2.1.4
+# * Fixed syntax error in dot output
+# Chris Monson (2007-03-01):
+# * Bumped version to 2.1.3
+# * Added reST to the included documentation
+# * Fixed graphics and script generation to be settable in the
+# environment.
+# Chris Monson (2007-02-23):
+# * Bumped version to 2.1.2
+# * Added the ability to generate .tex files from .rst files
+# Chris Monson (2006-10-17):
+# * Bumped version to 2.1.1
+# * Fixed includes from subdirectories (sed-to-sed slash escape problem)
+# Chris Monson (2006-10-05):
+# * Bumped version to 2.1.0 (pretty serious new feature added)
+# * New feature: bib files can now be anywhere on the BIBINPUTS path
+# * New programs: kpsewhich (with tetex) and xargs (BSD)
+# Chris Monson (2006-09-28):
+# * Bumped version to 2.0.9
+# * Added ability to parse more than one bibliography
+# Chris Monson (2006-06-01):
+# * Bumped version to 2.0.8
+# * Added .vrb to the list of cleaned files
+# Chris Monson (2006-04-26):
+# * Bumped version to 2.0.7
+# * Fixed so that clean-nographics does not remove .gpi.d files
+# * Removed jpg -> eps hack (not working properly -- just pre-convert)
+# * Fixed so that postscript grayscale can be done with BSD sed
+# Chris Monson (2006-04-25):
+# * Bumped version to 2.0.6
+# * Fixed so that changed toc, lot, lof, or out causes a rebuild
+# Chris Monson (2006-04-17):
+# * Bumped version to 2.0.5
+# * Added jpg -> eps conversion target
+# Chris Monson (2006-04-12):
+# * Bumped version to 2.0.4
+# * Fixed BSD sed invocation to not use \| as a branch delimiter
+# * Added a comment section on what is and is not allowed in BSD sed
+# * Made paper size handling more robust while I was at it
+# * Fixed postscript RGB grayscale to use a weighted average
+# * Fixed postscript HSB grayscale to convert to RGB first
+# * Fixed a problem with rebuilding .bbl files
+# Chris Monson (2006-04-11):
+# * Bumped version to 2.0.3
+# * Fixed some BSD sed problems: can't use \n in substitutions
+# Chris Monson (2006-04-10):
+# * Bumped version to 2.0.2
+# * Once again removed ability to create .tex files from scripts
+# * \includeonly works again
+# Chris Monson (2006-04-09):
+# * Bumped version to 2.0.1
+# * Fixed grayscale postscript handling to be more robust
+# * Added ability to generate ._gray_. files from eps and eps.gz
+# * Added ability to clean ._gray_.eps files created from .eps files
+# Chris Monson (2006-04-07):
+# * Bumped version to 2.0.0
+# * Removed clunky ability to create included .tex files from scripts
+# * Added note in the help about included tex scripting not working
+# * Fixed the .eps generation to delete %.gpihead.make when finished
+# * Abandoned designs to use shell variables to create sed scripts
+# * Abandoned __default__.tex.sh idea: it causes recursion with %: .
+# * Removed web page to-do. All items are now complete.
+# * Added better grayscale conversion for dot figures (direct ps fixup).
+# * Include files can now be scripted (at the expense of \includeonly).
+# * Updated dependency graph to contain better node names.
+# Chris Monson (2006-04-06):
+# * Bumped version to 2.0b3
+# * Top level includes now fail if there is no rule to build them
+# * A helpful message is printed when they do fail
+# * Grayscale has been changed to be ._gray_, other phonies use _ now, too
+# * Grayscale handling has been completed
+# * Changed _include_stems target to _includes target.
+# * Fixed _includes target to be useful by itself.
+# * Removed the ability to specify clean and build targets at once
+# * Verified that epsfig works fine with current code
+# * Fixed included scripts so that they are added to the dep files
+# * Fixed so that graphics includes don't happen if they aren't for gpi
+# * Fixed dot output to allow grayscale.
+# Chris Monson (2006-04-05):
+# * Bumped version to 2.0b2
+# * Removed automatic -gray output. It needs fixing in a bad way.
+# * Revamped dependency creation completely.
+# * Fixed conditional inclusion to actually work (test.nobuild.d, test.d).
+# * Fixed clean target to remove log targets
+# * Added the 'monochrome' word for gray gpi output
+# * Added a _check_gpi_files target that checks for common problems
+# * Changed the _version target into the version target (no _)
+# * Added better handling of grayscale files. Use the .gray.pdf target.
+# * Fixed testing for rebuilds
+# Chris Monson (2006-04-04):
+# * Bumped version to 2.0b1
+# * Changed colorization of output
+# * Made .auxbbl and .auxtex .make files secondary targets
+# * Shortened and simplified the final latex invocation loop
+# * Added version-specific output ($$i vs. $$$$i) in latex loop
+# * Added a build message for the first .dvi run (Building .dvi (0))
+# * Removed some build messages that most people don't care about.
+# * Simplified procedure for user-set colors -- simple text specification
+# * Fixed diff output to...not output.
+# * Fixed rerun bug -- detect not only when preceded with LaTeX Warning
+# * Sped up gpi plotting
+# * Added error handling and colorized output for gpi failure
+# * Documented color changing stuff.
+# * Now sort the flattened aux file to avoid false recompilation needs
+# * Added clean-nographics target
+# * Don't remove self.dvi file if self.aux is missing in the log
+# * Clarified some code. Did some very minor adjusting.
+# Chris Monson (2006-04-03):
+# * Bumped version to 2.0a7
+# * Added .dvi and .ps files as secondary files.
+# * Fixed handling of multiple run detection when includeonly is in use.
+# * Added code to flatten .aux files.
+# * Added more files as .SECONDARY prerequisites to avoid recompilation.
+# * Fixed the inputs generation to be much simpler and to use pipes.
+# * Added the dependency graph directly into the makefile.
+# * Changed flatten-aux to remove \@writefile \relax \newlabel, etc.
+# * Undid pipe changes with sed usage (BSD sed doesn't know -f-).
+# * Added a _check_programs target that tells you what your system has.
+# * Fixed an error in colorization that made unnecessary errors appear
+# * Added view targets.
+# * Updated help text.
+# * Augmented cookies so that .aux can trigger .bbl and .dvi rebuilds
+# * Added more informative error handling for dvips and ps2pdf
+# Chris Monson (2006-04-02):
+# * Bumped version to 2.0a6
+# * Added indirection to .bbl dependencies to avoid rebuilding .bbl files
+# * Streamlined the diff invocation to eliminate an existence test
+# * Removed special shell quote escape variables
+# * Moved includes to a more prominent location
+# * Fixed .inputs.make to not contain .aux files
+# * Fixed embedding to use a file instead of always grepping.
+# * Added *.make.temp to the list of cleanable files
+# * Fixed Ruby. It should now be supported properly.
+# * Now differentiate between all, default, and buildable files.
+# * Fixed to bail out on serious errors.
+# * Revised the handling of includable files. Still working on it.
+# Chris Monson (2006-03-31):
+# * Bumped version to 2.0a5
+# * Fixed a bug with LaTeX error detection (there can be spaces)
+# * Added .bbl support, simplifying everything and making it more correct
+# * Refactored some tests that muddy the code
+# * Did a little cleanup of some shell loops that can safely be make loops
+# * Added support for graphviz .dot files
+# * Made _all_programs output easier to read
+# * Added the ruby support that has long been advertised
+# * Font embedding was screwed up for PostScript -- now implicit
+# * Changed the generation of -gray.gpi files to a single command
+# * Changed any make-generated file that is not included from .d to .make
+# Chris Monson (2006-03-30):
+# * Bumped version to 2.0a4
+# * Fixed a bug with very long graphics file names
+# * Added a todo entry for epsfig support
+# * Fixed a bug paper size bug: sometimes more than one entry appears
+# * Fixed DVI build echoing to display the number instead of process ID
+# * DVI files are now removed on first invocation if ANY file is missing
+# * Added a simple grayscale approach: if a file ends with -gray.gpi, it
+# is created from the corresponding .gpi file with a special
+# comment ##GRAY in its header, which causes coloring to be
+# turned off.
+# * Fixed a bug in the handling of .tex.sh files. For some reason I had
+# neglected to define file stems for scripted output.
+# * Removed a trailing ; from the %.graphics dependencies
+# * Added dvips embedding (I think it works, anyway)
+# Chris Monson (2006-03-29):
+# * Bumped version to 2.0a3
+# * Fixed error in make 3.79 with MAKEFILE_LIST usage
+# * Added the presumed filename to the _version output
+# * Added a vim macro for converting sed scripts to make commands
+# * Added gpi dependency support (plotting external files and loading gpi)
+# * Allow .gpi files to be ignored if called .include.gpi or .nobuild.gpi
+# * Fixed sed invocations where \+ was used. BSD sed uses \{1,\}.
+# Chris Monson (2006-03-28):
+# * Bumped version to 2.0a2
+# * Added SHELL_DEBUG and VERBOSE options
+# * Changed the default shell back to /bin/sh (unset, in other words)
+# * Moved .PHONY declarations closer to their targets
+# * Moved help text into its own define block to obtain better formatting
+# * Removed need for double-entry when adding a new program invocation
+# * Moved .SECONDARY declaration closer to its relevant occurrence
+# * Commented things more heavily
+# * Added help text about setting terminal and output in gnuplot
+# * Created more fine-grained clean targets
+# * Added a %.graphics target that generates all of %'s graphics
+# * Killed backward-compatible graphics generation (e.g., eps.gpi=gpi.eps)
+# * For now, we're just GPL 2, not 3. Maybe it will change later
+# * Made the version and svninfo into variables
+# Chris Monson (2006-03-27):
+# * Bumped version to 2.0a1
+# * Huge, sweeping changes -- automatic dependencies
+#
+
+# IMPORTANT!
+#
+# When adding to the following list, do not introduce any blank lines. The
+# list is extracted for documentation using sed and is terminated by a blank
+# line.
+#
+# EXTERNAL PROGRAMS:
+# = ESSENTIAL PROGRAMS =
+# == Basic Shell Utilities ==
+CAT ?= cat
+CP ?= cp -f
+DIFF ?= diff
+ECHO ?= echo
+EGREP ?= egrep
+ENV ?= env
+EXPR ?= expr
+MV ?= mv -f
+SED ?= sed
+SORT ?= sort
+TOUCH ?= touch
+UNIQ ?= uniq
+WHICH ?= which
+XARGS ?= xargs
+SLEEP ?= sleep
+# == LaTeX (tetex-provided) ==
+BIBTEX ?= bibtex
+DVIPS ?= dvips
+LATEX ?= latex
+PDFLATEX ?= pdflatex
+XELATEX ?= xelatex
+EPSTOPDF ?= epstopdf
+MAKEINDEX ?= makeindex
+XINDY ?= xindy
+KPSEWHICH ?= kpsewhich
+GS ?= gs
+# = OPTIONAL PROGRAMS =
+# == For MikTex under Cygwin, to get path names right
+CYGPATH ?= cygpath
+# == Makefile Color Output ==
+TPUT ?= tput
+# == TeX Generation ==
+PERL ?= perl
+PYTHON ?= python
+RST2LATEX ?= rst2latex.py
+# == EPS Generation ==
+CONVERT ?= convert # ImageMagick
+DOT ?= dot # GraphViz
+DOT2TEX ?= dot2tex # dot2tex - add options (not -o) as needed
+FIG2DEV ?= fig2dev # XFig
+GNUPLOT ?= gnuplot # GNUplot
+INKSCAPE ?= inkscape # Inkscape (svg support)
+XMGRACE ?= xmgrace # XMgrace
+PNGTOPNM ?= pngtopnm # From NetPBM - step 1 for png -> eps
+PPMTOPGM ?= ppmtopgm # From NetPBM - (gray) step 2 for png -> eps
+PNMTOPS ?= pnmtops # From NetPBM - step 3 for png -> eps
+GUNZIP ?= gunzip # GZipped EPS
+# == Beamer Enlarged Output ==
+PSNUP ?= psnup
+# == Viewing Stuff ==
+VIEW_POSTSCRIPT ?= gv
+VIEW_PDF ?= xpdf
+VIEW_GRAPHICS ?= display
+
+# Xindy glossaries
+XINDYLANG ?= english
+XINDYENC ?= utf8
+
+# If cygpath is present, then we create a path-norm function that uses it,
+# otherwise the function is just a no-op. Issue 112 has details.
+USE_CYGPATH := $(if $(shell $(WHICH) $(CYGPATH) 2>/dev/null),yes,)
+
+# $(call get-cygpath,<path>)
+define get-cygpath
+$(shell $(CYGPATH) -u "$(shell $(CYGPATH) -s -w $1)")
+endef
+
+define path-norm
+$(if $(USE_CYGPATH),$(call get-cygpath,$1),$1)
+endef
+
+# Command options for embedding fonts and postscript->pdf conversion
+PS_EMBED_OPTIONS ?= -dPDFSETTINGS=/printer -dEmbedAllFonts=true -dSubsetFonts=true -dMaxSubsetPct=100
+PS_COMPATIBILITY ?= 1.4
+
+# If set to something, will cause temporary files to not be deleted immediately
+KEEP_TEMP ?=
+
+# Defaults for GPI
+DEFAULT_GPI_EPS_FONTSIZE ?= 22
+DEFAULT_GPI_PDF_FONTSIZE ?= 12
+
+# Style file for ReST
+RST_STYLE_FILE ?= $(wildcard _rststyle_._include_.tex)
+
+# This ensures that even when echo is a shell builtin, we still use the binary
+# (the builtin doesn't always understand -n)
+FIXED_ECHO := $(if $(findstring -n,$(shell $(ECHO) -n)),$(shell which echo),$(ECHO))
+ECHO := $(if $(FIXED_ECHO),$(FIXED_ECHO),$(ECHO))
+
+define determine-gnuplot-output-extension
+$(if $(shell $(WHICH) $(GNUPLOT) 2>/dev/null),
+ $(if $(findstring unknown or ambiguous, $(shell $(GNUPLOT) -e "set terminal pdf" 2>&1)),
+ eps, pdf),
+ none)
+endef
+
+GNUPLOT_OUTPUT_EXTENSION ?= $(strip $(call determine-gnuplot-output-extension))
+
+# Internal code should use this because of :=. This means that the potentially
+# expensive script invocation used to determine whether pdf is available will
+# only be run once.
+GPI_OUTPUT_EXTENSION := $(strip $(GNUPLOT_OUTPUT_EXTENSION))
+
+# Note, if the terminal *does* understand fsize, then we expect this call to
+# create a specific error here: "fsize: expecting font size". Otherwise, we
+# assume that fsize is not understood.
+GPI_FSIZE_SYNTAX := $(strip \
+$(if \
+ $(filter pdf,$(GPI_OUTPUT_EXTENSION)),\
+ $(if \
+ $(findstring fsize: expecting font size,$(shell $(GNUPLOT) -e "set terminal pdf fsize" 2>&1)),\
+ fsize FONTSIZE,\
+ font ",FONTSIZE"),\
+ FONTSIZE))
+
+# Directory into which we place "binaries" if it exists.
+# Note that this can be changed on the commandline or in Makefile.ini:
+#
+# Command line:
+# make BINARY_TARGET_DIR=$HOME/pdfs myfile.pdf
+#
+# Also, you can specify a relative directory (relative to the Makefile):
+# make BINARY_TARGET_DIR=pdfs myfile.pdf
+#
+# Or, you can use Makefile.ini:
+#
+# BINARY_TARGET_DIR := $(HOME)/bin_out
+#
+BINARY_TARGET_DIR ?= _out_
+
+RESTARTS := $(if $(MAKE_RESTARTS),$(MAKE_RESTARTS),0)
+# SH NOTES
+#
+# On some systems, /bin/sh, which is the default shell, is not linked to
+# /bin/bash. While bash is supposed to be sh-compatible when invoked as sh, it
+# just isn't. This section details some of the things you have to stay away
+# from to remain sh-compatible.
+#
+# * File pattern expansion does not work for {}
+# * [ "$x" = "$y" ] has to be [ x"$x" x"$y" ]
+# * &> for stderr redirection doesn't work, use 2>&1 instead
+#
+# BSD SED NOTES
+#
+# BSD SED is not very nice compared to GNU sed, but it is the most
+# commonly-invoked sed on Macs (being based on BSD), so we have to cater to
+# it or require people to install GNU sed. It seems like the GNU
+# requirement isn't too bad since this makefile is really a GNU makefile,
+# but apparently GNU sed is much less common than GNU make in general, so
+# I'm supporting it here.
+#
+# Sad experience has taught me the following about BSD sed:
+#
+# * \+ is not understood to mean \{1,\}
+# * \| is meaningless (does not branch)
+# * \n cannot be used as a substitution character
+# * ? does not mean \{0,1\}, but is literal
+# * a\ works, but only reliably for a single line if subsequent lines
+# have forward slashes in them (as is the case in postscript)
+#
+# For more info (on the Mac) you can consult
+#
+# man -M /usr/share/man re_format
+#
+# And look for the word "Obsolete" near the bottom.
+
+#
+# EXTERNAL PROGRAM DOCUMENTATION SCRIPT
+#
+
+# $(call output-all-programs,[<output file>])
+define output-all-programs
+ [ -f '$(this_file)' ] && \
+ $(SED) \
+ -e '/^[[:space:]]*#[[:space:]]*EXTERNAL PROGRAMS:/,/^$$/!d' \
+ -e '/EXTERNAL PROGRAMS/d' \
+ -e '/^$$/d' \
+ -e '/^[[:space:]]*#/i\ '\
+ -e 's/^[[:space:]]*#[[:space:]][^=]*//' \
+ $(this_file) $(if $1,> '$1',) || \
+ $(ECHO) "Cannot determine the name of this makefile."
+endef
+
+# If they misspell gray, it should still work.
+GRAY ?= $(call get-default,$(GREY),)
+
+#
+# Utility Functions and Definitions
+#
+
+# Don't call this directly - it is here to avoid calling wildcard more than
+# once in remove-files.
+remove-files-helper = $(if $1,$(RM) $1,$(sh_true))
+
+# $(call remove-files,file1 file2)
+remove-files = $(call remove-files-helper,$(wildcard $1))
+
+# Removes all cleanable files in the given list
+# $(call clean-files,file1 file2 file3 ...)
+# Works exactly like remove-files, but filters out files in $(neverclean)
+clean-files = \
+ $(call remove-files-helper,$(call cleanable-files,$(wildcard $1)))
+
+# Outputs all generated files to STDOUT, along with some others that are
+# created by these (e.g., .idx files end up producing .ilg and .ind files).
+# Discovered by reading *.fls OUTPUT lines and producing corresponding .ind
+# filenames as needed.
+#
+# $(call get-generated-names,<source recorder file (*.fls)>)
+define get-generated-names
+[ -f '$1' ] && \
+$(SED) \
+ -e '/^OUTPUT /{' \
+ -e ' s///' \
+ -e ' p' \
+ -e ' s/\.idx/\.ind/p' \
+ -e ' s/\.ind/\.ilg/p' \
+ -e '}' \
+ -e 'd' \
+ '$1' \
+| $(SORT) | $(UNIQ)
+endef
+
+# This removes files without checking whether they are there or not. This
+# sometimes has to be used when the file is created by a series of shell
+# commands, but there ends up being a race condition: make doesn't know about
+# the file generation as quickly as the system does, so $(wildcard ...) doesn't
+# work right. Blech.
+# $(call remove-temporary-files,filenames)
+remove-temporary-files = $(if $(KEEP_TEMP),:,$(if $1,$(RM) $1,:))
+
+# Create an identifier from a file name
+# $(call cleanse-filename,filename)
+cleanse-filename = $(subst .,_,$(subst /,__,$1))
+
+# Escape dots
+# $(call escape-fname-regex,str)
+escape-fname-regex = $(subst /,\\/,$(subst .,\\.,$1))
+
+# Test that a file exists
+# $(call test-exists,file)
+test-exists = [ -e '$1' ]
+
+# $(call move-files,source,destination)
+move-if-exists = $(call test-exists,$1) && $(MV) '$1' '$2'
+
+# Copy file1 to file2 only if file2 doesn't exist or they are different
+# $(call copy-if-different,sfile,dfile)
+copy-if-different = $(call test-different,$1,$2) && $(CP) '$1' '$2'
+copy-if-exists = $(call test-exists,$1) && $(CP) '$1' '$2'
+move-if-different = $(call test-different,$1,$2) && $(MV) '$1' '$2'
+replace-if-different-and-remove = \
+ $(call test-different,$1,$2) \
+ && $(MV) '$1' '$2' \
+ || $(call remove-files,'$1')
+
+# Note that $(DIFF) returns success when the files are the SAME....
+# $(call test-different,sfile,dfile)
+test-different = ! $(DIFF) -q '$1' '$2' >/dev/null 2>&1
+test-exists-and-different = \
+ $(call test-exists,$2) && $(call test-different,$1,$2)
+
+# Return value 1, or value 2 if value 1 is empty
+# $(call get-default,<possibly empty arg>,<default value if empty>)
+get-default = $(if $1,$1,$2)
+
+# Copy a file and log what's going on
+# $(call copy-with-logging,<source>,<target>)
+define copy-with-logging
+if [ -d '$2/' ]; then \
+ if $(CP) '$1' '$2/'; then \
+ $(ECHO) "$(C_INFO)Copied '$1' to '$2/'$(C_RESET)"; \
+ else \
+ $(ECHO) "$(C_ERROR)Failed to copy '$1' to '$2/'$(C_RESET)"; \
+ fi; \
+fi
+endef
+
+# Gives a reassuring message about the failure to find include files
+# $(call include-message,<list of include files>)
+define include-message
+$(strip \
+$(if $(filter-out $(wildcard $1),$1),\
+ $(shell $(ECHO) \
+ "$(C_INFO)NOTE: You may ignore warnings about the"\
+ "following files:" >&2;\
+ $(ECHO) >&2; \
+ $(foreach s,$(filter-out $(wildcard $1),$1),$(ECHO) ' $s' >&2;)\
+ $(ECHO) "$(C_RESET)" >&2)
+))
+endef
+# Characters that are hard to specify in certain places
+space := $(empty) $(empty)
+colon := \:
+comma := ,
+
+# Useful shell definitions
+sh_true := :
+sh_false := ! :
+
+# Clear out the standard interfering make suffixes
+.SUFFIXES:
+
+# Turn off forceful rm (RM is usually mapped to rm -f)
+ifdef SAFE_RM
+RM := rm
+endif
+
+# Turn command echoing back on with VERBOSE=1
+ifndef VERBOSE
+QUIET := @
+endif
+
+# Turn on shell debugging with SHELL_DEBUG=1
+# (EVERYTHING is echoed, even $(shell ...) invocations)
+ifdef SHELL_DEBUG
+SHELL += -x
+endif
+
+# Get the name of this makefile (always right in 3.80, often right in 3.79)
+# This is only really used for documentation, so it isn't too serious.
+ifdef MAKEFILE_LIST
+this_file := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+else
+this_file := $(wildcard GNUmakefile makefile Makefile)
+endif
+
+# Terminal color definitions
+
+REAL_TPUT := $(if $(NO_COLOR),,$(shell $(WHICH) $(TPUT)))
+
+# $(call get-term-code,codeinfo)
+# e.g.,
+# $(call get-term-code,setaf 0)
+get-term-code = $(if $(REAL_TPUT),$(shell $(REAL_TPUT) $1),)
+
+black := $(call get-term-code,setaf 0)
+red := $(call get-term-code,setaf 1)
+green := $(call get-term-code,setaf 2)
+yellow := $(call get-term-code,setaf 3)
+blue := $(call get-term-code,setaf 4)
+magenta := $(call get-term-code,setaf 5)
+cyan := $(call get-term-code,setaf 6)
+white := $(call get-term-code,setaf 7)
+bold := $(call get-term-code,bold)
+uline := $(call get-term-code,smul)
+reset := $(call get-term-code,sgr0)
+
+#
+# User-settable definitions
+#
+LATEX_COLOR_WARNING ?= magenta
+LATEX_COLOR_ERROR ?= red
+LATEX_COLOR_INFO ?= green
+LATEX_COLOR_UNDERFULL ?= magenta
+LATEX_COLOR_OVERFULL ?= red bold
+LATEX_COLOR_PAGES ?= bold
+LATEX_COLOR_BUILD ?= cyan
+LATEX_COLOR_GRAPHIC ?= yellow
+LATEX_COLOR_DEP ?= green
+LATEX_COLOR_SUCCESS ?= green bold
+LATEX_COLOR_FAILURE ?= red bold
+
+# Gets the real color from a simple textual definition like those above
+# $(call get-color,ALL_CAPS_COLOR_NAME)
+# e.g., $(call get-color,WARNING)
+get-color = $(subst $(space),,$(foreach c,$(LATEX_COLOR_$1),$($c)))
+
+#
+# STANDARD COLORS
+#
+C_WARNING := $(call get-color,WARNING)
+C_ERROR := $(call get-color,ERROR)
+C_INFO := $(call get-color,INFO)
+C_UNDERFULL := $(call get-color,UNDERFULL)
+C_OVERFULL := $(call get-color,OVERFULL)
+C_PAGES := $(call get-color,PAGES)
+C_BUILD := $(call get-color,BUILD)
+C_GRAPHIC := $(call get-color,GRAPHIC)
+C_DEP := $(call get-color,DEP)
+C_SUCCESS := $(call get-color,SUCCESS)
+C_FAILURE := $(call get-color,FAILURE)
+C_RESET := $(reset)
+
+#
+# PRE-BUILD TESTS
+#
+
+# Check that clean targets are not combined with other targets (weird things
+# happen, and it's not easy to fix them)
+hascleangoals := $(if $(sort $(filter clean clean-%,$(MAKECMDGOALS))),1)
+hasbuildgoals := $(if $(sort $(filter-out clean clean-%,$(MAKECMDGOALS))),1)
+ifneq "$(hasbuildgoals)" ""
+ifneq "$(hascleangoals)" ""
+$(error $(C_ERROR)Clean and build targets specified together$(C_RESET)))
+endif
+endif
+
+#
+# VARIABLE DECLARATIONS
+#
+
+# Names of sed scripts that morph gnuplot files -- only the first found is used
+GNUPLOT_SED := global-gpi.sed gnuplot.sed
+GNUPLOT_GLOBAL := global._include_.gpi gnuplot.global
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+default_graphic_extension ?= eps
+latex_build_program ?= $(LATEX)
+build_target_extension ?= dvi
+hyperref_driver_pattern ?= hdvips
+hyperref_driver_error ?= Using dvips: specify ps2pdf in the hyperref options.
+endif
+
+ifeq "$(strip $(BUILD_STRATEGY))" "pdflatex"
+default_graphic_extension ?= pdf
+latex_build_program ?= $(PDFLATEX)
+build_target_extension ?= pdf
+hyperref_driver_pattern ?= hpdf.*
+hyperref_driver_error ?= Using pdflatex: specify pdftex in the hyperref options (or leave it blank).
+endif
+
+ifeq "$(strip $(BUILD_STRATEGY))" "xelatex"
+default_graphic_extension ?= pdf
+latex_build_program ?= $(XELATEX)
+build_target_extension ?= pdf
+hyperref_driver_pattern ?= hdvipdf.*
+hyperref_driver_error ?= Using pdflatex: specify pdftex in the hyperref options (or leave it blank).
+endif
+
+# Files of interest
+all_files.tex ?= $(wildcard *.tex)
+all_files.tex.sh ?= $(wildcard *.tex.sh)
+all_files.tex.pl ?= $(wildcard *.tex.pl)
+all_files.tex.py ?= $(wildcard *.tex.py)
+all_files.rst ?= $(wildcard *.rst)
+all_files.fig ?= $(wildcard *.fig)
+all_files.gpi ?= $(wildcard *.gpi)
+all_files.dot ?= $(wildcard *.dot)
+all_files.xvg ?= $(wildcard *.xvg)
+all_files.svg ?= $(wildcard *.svg)
+all_files.png ?= $(wildcard *.png)
+all_files.jpg ?= $(wildcard *.jpg)
+all_files.jpeg ?= $(wildcard *.jpeg)
+all_files.eps.gz ?= $(wildcard *.eps.gz)
+all_files.eps ?= $(wildcard *.eps)
+
+# Utility function for obtaining all files not specified in $(neverclean)
+# $(call cleanable-files,file1 file2 file3 ...)
+# Returns the list of files that is not in $(wildcard $(neverclean))
+cleanable-files = $(filter-out $(wildcard $(neverclean)), $1)
+
+# Utility function for getting all .$1 files that are to be ignored
+# * files listed in $(includes.$1)
+# * files not listed in $(onlysources.$1) if it is defined
+ignore_files = \
+ $(includes.$1) \
+ $(if $(onlysources.$1),$(filter-out $(onlysources.$1), $(all_files.$1)))
+
+# Patterns to never be allowed as source targets
+ignore_patterns := %._include_
+
+# Patterns allowed as source targets but not included in 'all' builds
+nodefault_patterns := %._nobuild_ $(ignore_patterns)
+
+# Utility function for getting targets suitable building
+# $(call filter-buildable,suffix)
+filter-buildable = \
+ $(filter-out $(call ignore_files,$1) \
+ $(addsuffix .$1,$(ignore_patterns)),$(all_files.$1))
+
+# Utility function for getting targets suitable for 'all' builds
+# $(call filter-default,suffix)
+filter-default = \
+ $(filter-out $(call ignore_files,$1) \
+ $(addsuffix .$1,$(nodefault_patterns)),$(all_files.$1))
+
+# Top level sources that can be built even when they are not by default
+files.tex := $(call filter-buildable,tex)
+files.tex.sh := $(call filter-buildable,tex.sh)
+files.tex.pl := $(call filter-buildable,tex.pl)
+files.tex.py := $(call filter-buildable,tex.py)
+files.rst := $(call filter-buildable,rst)
+files.gpi := $(call filter-buildable,gpi)
+files.dot := $(call filter-buildable,dot)
+files.fig := $(call filter-buildable,fig)
+files.xvg := $(call filter-buildable,xvg)
+files.svg := $(call filter-buildable,svg)
+files.png := $(call filter-buildable,png)
+files.jpg := $(call filter-buildable,jpg)
+files.jpeg := $(call filter-buildable,jpeg)
+files.eps.gz := $(call filter-buildable,eps.gz)
+files.eps := $(call filter-buildable,eps)
+
+# Make all pstex targets secondary. The pstex_t target requires the pstex
+# target, and nothing else really depends on it, so it often gets deleted.
+# This avoids that by allowing *all* fig files to be pstex targets, which is
+# perfectly valid and causes no problems even if they're going to become eps
+# files in the end.
+.SECONDARY: $(patsubst %.fig,%.pstex,$(files.fig))
+
+# Top level sources that are built by default targets
+default_files.tex := $(call filter-default,tex)
+default_files.tex.sh := $(call filter-default,tex.sh)
+default_files.tex.pl := $(call filter-default,tex.pl)
+default_files.tex.py := $(call filter-default,tex.py)
+default_files.rst := $(call filter-default,rst)
+default_files.gpi := $(call filter-default,gpi)
+default_files.dot := $(call filter-default,dot)
+default_files.fig := $(call filter-default,fig)
+default_files.xvg := $(call filter-default,xvg)
+default_files.svg := $(call filter-default,svg)
+default_files.png := $(call filter-default,png)
+default_files.jpg := $(call filter-default,jpg)
+default_files.jpeg := $(call filter-default,jpeg)
+default_files.eps.gz := $(call filter-default,eps.gz)
+default_files.eps := $(call filter-default,eps)
+
+# Utility function for creating larger lists of files
+# $(call concat-files,suffixes,[prefix])
+concat-files = $(foreach s,$1,$($(if $2,$2_,)files.$s))
+
+# Useful file groupings
+all_files_source := $(call concat-files,tex,all)
+all_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,all)
+
+.PHONY: $(all_files_scripts)
+
+default_files_source := $(call concat-files,tex,default)
+default_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,default)
+
+files_source := $(call concat-files,tex)
+files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst)
+
+# Utility function for obtaining stems
+# $(call get-stems,suffix,[prefix])
+get-stems = $(sort $($(if $2,$2_,)files.$1:%.$1=%))
+
+# List of all stems (including ._include_ and ._nobuild_ file stems)
+all_stems.tex := $(call get-stems,tex,all)
+all_stems.tex.sh := $(call get-stems,tex.sh,all)
+all_stems.tex.pl := $(call get-stems,tex.pl,all)
+all_stems.tex.py := $(call get-stems,tex.py,all)
+all_stems.rst := $(call get-stems,rst,all)
+all_stems.fig := $(call get-stems,fig,all)
+all_stems.gpi := $(call get-stems,gpi,all)
+all_stems.dot := $(call get-stems,dot,all)
+all_stems.xvg := $(call get-stems,xvg,all)
+all_stems.svg := $(call get-stems,svg,all)
+all_stems.png := $(call get-stems,png,all)
+all_stems.jpg := $(call get-stems,jpg,all)
+all_stems.jpeg := $(call get-stems,jpeg,all)
+all_stems.eps.gz := $(call get-stems,eps.gz,all)
+all_stems.eps := $(call get-stems,eps,all)
+
+# List of all default stems (all default PDF targets):
+default_stems.tex := $(call get-stems,tex,default)
+default_stems.tex.sh := $(call get-stems,tex.sh,default)
+default_stems.tex.pl := $(call get-stems,tex.pl,default)
+default_stems.tex.py := $(call get-stems,tex.py,default)
+default_stems.rst := $(call get-stems,rst,default)
+default_stems.fig := $(call get-stems,fig,default)
+default_stems.gpi := $(call get-stems,gpi,default)
+default_stems.dot := $(call get-stems,dot,default)
+default_stems.xvg := $(call get-stems,xvg,default)
+default_stems.svg := $(call get-stems,svg,default)
+default_stems.png := $(call get-stems,png,default)
+default_stems.jpg := $(call get-stems,jpg,default)
+default_stems.jpeg := $(call get-stems,jpeg,default)
+default_stems.eps.gz := $(call get-stems,eps.gz,default)
+default_stems.eps := $(call get-stems,eps,default)
+
+# List of all stems (all possible bare PDF targets created here):
+stems.tex := $(call get-stems,tex)
+stems.tex.sh := $(call get-stems,tex.sh)
+stems.tex.pl := $(call get-stems,tex.pl)
+stems.tex.py := $(call get-stems,tex.py)
+stems.rst := $(call get-stems,rst)
+stems.fig := $(call get-stems,fig)
+stems.gpi := $(call get-stems,gpi)
+stems.dot := $(call get-stems,dot)
+stems.xvg := $(call get-stems,xvg)
+stems.svg := $(call get-stems,svg)
+stems.png := $(call get-stems,png)
+stems.jpg := $(call get-stems,jpg)
+stems.jpeg := $(call get-stems,jpeg)
+stems.eps.gz := $(call get-stems,eps.gz)
+stems.eps := $(call get-stems,eps)
+
+# Utility function for creating larger lists of stems
+# $(call concat-stems,suffixes,[prefix])
+concat-stems = $(sort $(foreach s,$1,$($(if $2,$2_,)stems.$s)))
+
+# The most likely to be source but not finished product go first
+graphic_source_extensions := fig \
+ gpi \
+ xvg \
+ svg \
+ dot \
+ eps.gz
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+graphic_source_extensions += png jpg jpeg
+graphic_target_extensions := eps ps
+endif
+
+ifeq "$(strip $(BUILD_STRATEGY))" "pdflatex"
+graphic_source_extensions += eps
+graphic_target_extensions := pdf png jpg jpeg mps tif
+endif
+
+ifeq "$(strip $(BUILD_STRATEGY))" "xelatex"
+graphic_source_extensions += eps
+graphic_target_extensions := pdf png jpg jpeg mps tif
+endif
+
+all_stems_source := $(call concat-stems,tex,all)
+all_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,all)
+all_stems_graphic := $(call concat-stems,$(graphic_source_extensions),all)
+all_stems_ss := $(sort $(all_stems_source) $(all_stems_script))
+all_stems_sg := $(sort $(all_stems_script))
+all_stems_ssg := $(sort $(all_stems_ss))
+
+default_stems_source := $(call concat-stems,tex,default)
+default_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,default)
+default_stems_ss := $(sort $(default_stems_source) $(default_stems_script))
+default_stems_sg := $(sort $(default_stems_script))
+default_stems_ssg := $(sort $(default_stems_ss))
+
+stems_source := $(call concat-stems,tex)
+stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst)
+stems_graphic := $(call concat-stems,$(graphic_source_extensions))
+stems_gg := $(sort $(stems_graphic))
+stems_ss := $(sort $(stems_source) $(stems_script))
+stems_sg := $(sort $(stems_script))
+stems_ssg := $(sort $(stems_ss))
+
+# Calculate names that can generate the need for an include file. We can't
+# really do this with patterns because it's too easy to screw up, so we create
+# an exhaustive list.
+allowed_source_suffixes := \
+ pdf \
+ ps \
+ dvi \
+ ind \
+ nls \
+ bbl \
+ aux \
+ aux.make \
+ d \
+ auxbbl.make \
+ _graphics \
+ _show
+allowed_source_patterns := $(addprefix %.,$(allowed_source_suffixes))
+
+allowed_graphic_suffixes := \
+ pdf \
+ eps \
+ gpihead.make \
+ gpi.d
+allowed_graphic_patterns := $(addprefix %.,$(allowed_graphic_suffixes))
+
+# All targets allowed to build documents
+allowed_source_targets := \
+ $(foreach suff,$(allowed_source_suffixes),\
+ $(addsuffix .$(suff),$(stems_ssg)))
+
+# All targets allowed to build graphics
+allowed_graphic_targets := \
+ $(foreach suff,$(allowed_graphic_suffixes),\
+ $(addsuffix .$(suff),$(stems_gg)))
+
+# All targets that build multiple documents (like 'all')
+allowed_batch_source_targets := \
+ all \
+ all-pdf \
+ all-ps \
+ all-dvi \
+ all-bbl \
+ all-ind \
+ all-gls \
+ all-nls \
+ show
+
+# All targets that build multiple graphics (independent of document)
+allowed_batch_graphic_targets := \
+ all-graphics \
+ all-pstex \
+ all-dot2tex \
+ show-graphics
+
+# Now we figure out which stuff is available as a make target for THIS RUN.
+real_goals := $(call get-default,$(filter-out _includes,$(MAKECMDGOALS)),\
+ all)
+
+specified_source_targets := $(strip \
+ $(filter $(allowed_source_targets) $(stems_ssg),$(real_goals)) \
+ )
+
+specified_batch_source_targets := $(strip \
+ $(filter $(allowed_batch_source_targets),$(real_goals)) \
+ )
+
+specified_graphic_targets := $(strip \
+ $(filter $(allowed_graphic_targets),$(real_goals)) \
+ )
+
+specified_batch_graphic_targets := $(strip \
+ $(filter $(allowed_batch_graphic_targets),$(real_goals)) \
+ )
+
+specified_gpi_targets := $(patsubst %.gpi,%.$(default_graphic_extension),\
+ $(filter $(patsubst %.$(default_graphic_extension),%.gpi,$(specified_graphic_targets)),\
+ $(all_files.gpi)) \
+ )
+
+# Determine which .d files need including from the information gained above.
+# This is done by first checking whether a batch target exists. If it does,
+# then all *default* stems are used to create possible includes (nobuild need
+# not apply for batch status). If no batch targets exist, then the individual
+# targets are considered and appropriate includes are taken from them.
+source_stems_to_include := \
+ $(sort\
+ $(if $(specified_batch_source_targets),\
+ $(default_stems_ss),\
+ $(foreach t,$(specified_source_targets),\
+ $(foreach p,$(allowed_source_patterns),\
+ $(patsubst $p,%,$(filter $p $(stems_ssg),$t)) \
+ )) \
+ ))
+
+# Determine which .gpi.d files are needed using the above information. We
+# first check whether a batch target is specified, then check individual
+# graphics that may have been specified.
+graphic_stems_to_include := \
+ $(sort\
+ $(if $(specified_batch_graphic_targets),\
+ $(default_stems.gpi),\
+ $(foreach t,$(specified_gpi_targets),\
+ $(foreach p,$(allowed_graphic_patterns),\
+ $(patsubst $p,%,$(filter $p,$t)) \
+ )) \
+ ))
+
+# All dependencies for the 'all' targets
+all_pdf_targets := $(addsuffix .pdf,$(stems_ssg))
+all_ps_targets := $(addsuffix .ps,$(stems_ssg))
+all_dvi_targets := $(addsuffix .dvi,$(stems_ssg))
+all_tex_targets := $(addsuffix .tex,$(stems_sg))
+all_d_targets := $(addsuffix .d,$(stems_ssg))
+all_graphics_targets := $(addsuffix .$(default_graphic_extension),$(stems_gg))
+all_pstex_targets := $(addsuffix .pstex_t,$(stems.fig))
+all_dot2tex_targets := $(addsuffix .dot_t,$(stems.dot))
+
+all_known_graphics := $(sort $(all_graphics_targets) $(wildcard *.$(default_graphic_extension)))
+
+default_pdf_targets := $(addsuffix .pdf,$(default_stems_ss))
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+default_ps_targets := $(addsuffix .ps,$(default_stems_ss))
+default_dvi_targets := $(addsuffix .dvi,$(default_stems_ss))
+pre_pdf_extensions := dvi ps
+endif
+
+# Extensions generated by LaTeX invocation that can be removed when complete
+rm_ext := \
+ log *.log aux $(pre_pdf_extensions) pdf blg bbl out nav snm toc lof lot lol pfg \
+ fls vrb idx ind ilg glg glo gls lox nls nlo nlg brf mtc maf brf ist
+backup_patterns := *~ *.bak *.backup body.tmp head.tmp
+
+graph_stem := _graph
+
+# All LaTeX-generated files that can be safely removed
+
+rm_tex := \
+ $(foreach e,$(rm_ext),$(addsuffix .$e,$(all_stems_source))) \
+ $(foreach e,$(rm_ext) tex,$(addsuffix .$e,$(all_stems_sg))) \
+ $(addsuffix .log,$(all_ps_targets) $(all_pdf_targets)) \
+ $(addsuffix .*.log,$(stems_graphic))
+
+# These are the files that will affect .gpi transformation for all .gpi files.
+#
+# Use only the first one found. Backward compatible values are at the end.
+# Note that we use foreach, even though wildcard also returns a list, to ensure
+# that the order in the uppercase variables is preserved. Directory listings
+# provide no such guarantee, so we avoid relying on them.
+gpi_sed := $(strip \
+ $(firstword $(foreach f,$(GNUPLOT_SED),$(wildcard $f))))
+gpi_global := $(strip \
+ $(firstword $(foreach f,$(GNUPLOT_GLOBAL),$(wildcard $f))))
+
+#
+# Functions used in generating output
+#
+
+# Outputs all source dependencies to stdout. The first argument is the file to
+# be parsed, the second is a list of files that will show up as dependencies in
+# the new .d file created here.
+#
+# $(call get-inputs,<parsed file>,<target files>)
+define get-inputs
+$(SED) \
+-e '/^INPUT/!d' \
+-e 's!^INPUT \(\./\)\{0,1\}!!' \
+-e 's/[[:space:]]/\\ /g' \
+-e 's/\(.*\)\.aux$$/\1.tex/' \
+-e '/\.tex$$/b addtargets' \
+-e '/\.cls$$/b addtargets' \
+-e '/\.sty$$/b addtargets' \
+-e '/\.pstex_t$$/b addtargets' \
+-e '/\.dot_t$$/b addtargets' \
+-e 'd' \
+-e ':addtargets' \
+-e 's!.*!$2: $$(call path-norm,&)!' \
+'$1' | $(SORT) | $(UNIQ)
+endef
+
+# $(call get-missing-inputs,<log file>,<target files>)
+define get-missing-inputs
+$(SED) \
+-e '$${' \
+-e ' /^$$/!{' \
+-e ' H' \
+-e ' s/.*//' \
+-e ' }' \
+-e '}' \
+-e '/^$$/!{' \
+-e ' H' \
+-e ' d' \
+-e '}' \
+-e '/^$$/{' \
+-e ' x' \
+-e ' s/^\(\n\)\(.*\)/\2\1/' \
+-e '}' \
+-e '/^::P\(P\{1,\}\)::/{' \
+-e ' s//::\1::/' \
+-e ' G' \
+-e ' h' \
+-e ' d' \
+-e '}' \
+-e '/^::P::/{' \
+-e ' s//::0::/' \
+-e ' G' \
+-e '}' \
+-e 'b start' \
+-e ':needonemore' \
+-e 's/^/::P::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needtwomore' \
+-e 's/^/::PP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needthreemore' \
+-e 's/^/::PPP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':start' \
+-e '/^! LaTeX Error: File `/{' \
+-e ' b needtwomore' \
+-e '}' \
+-e '/^::0::\(.*\)/{' \
+-e ' s//\1/' \
+-e ' /Default extension: /!d' \
+-e ' s/.*File `\([^'"'"']*\)'"'"' not found.*/\1/' \
+-e ' s/[[:cntrl:]]//' \
+-e ' /\.tex/!s/$$/.tex/' \
+-e ' s/[[:space:]]/\\ /g' \
+-e ' h' \
+-e ' s/.*/# MISSING input "&" - (presence of comment affects build)/' \
+-e ' p' \
+-e ' s/.*//' \
+-e ' x' \
+-e ' s!^.*!$2: $$(call path-norm,&)!' \
+-e ' p' \
+-e '}' \
+-e 'd' \
+'$1' | $(SORT) | $(UNIQ)
+endef
+
+# Get source file for specified graphics stem.
+#
+# $(call graphics-source,<stem>)
+define graphics-source
+$(strip $(firstword \
+ $(wildcard \
+ $(addprefix $1.,\
+ $(graphic_source_extensions))) \
+ $1 \
+))
+endef
+
+# Get the target file for the specified graphics file/stem
+#
+# $(call graphics-target,<stem>)
+define graphics-target
+$(strip $(if $(filter $(addprefix %.,$(graphic_target_extensions)),$1), $1,
+ $(firstword $(patsubst $(addprefix %.,$(graphic_source_extensions) $(graphic_target_extensions)), %, $1).$(default_graphic_extension) $1.$(default_graphic_extension))))
+endef
+
+# Outputs all of the graphical dependencies to stdout. The first argument is
+# the stem of the source file being built, the second is a list of suffixes
+# that will show up as dependencies in the generated .d file.
+#
+# Note that we try to escape spaces in filenames where possible. We have to do
+# it with three backslashes so that as the name percolates through the makefile
+# it eventually ends up with the proper escaping when the build rule is found.
+# Ugly, but it appears to work. Note that graphicx doesn't allow filenames
+# with spaces, so this could in many ways be moot unless you're using something
+# like grffile.
+#
+# For pdflatex, we really need the missing file to be specified without an
+# extension, otherwise compilation barfs on the first missing file. Truly
+# annoying, but there you have it.
+#
+# It turns out that the graphics errors, although they have lines with empty
+# space, are only made of two paragraphs. So, we just use some sed magic to
+# get everything into paragraphs, detect when it's a paragraph that interests
+# us, and double it up. Then we get the filename only if we're missing
+# extensions (a sign that it's graphicx complaining).
+#
+# $(call get-graphics,<target file stem>)
+#.log,$(addprefix $*.,d $(build_target_extension) _graphics)
+define get-graphics
+$(SED) \
+-e '/^File: \(.*\) Graphic file (type [^)]*)/{' \
+-e ' s//\1/' \
+-e ' b addtargets' \
+-e '}' \
+-e '$${' \
+-e ' /^$$/!{' \
+-e ' H' \
+-e ' s/.*//' \
+-e ' }' \
+-e '}' \
+-e '/^$$/!{' \
+-e ' H' \
+-e ' d' \
+-e '}' \
+-e '/^$$/{' \
+-e ' x' \
+-e ' s/^\(\n\)\(.*\)/\2\1/' \
+-e '}' \
+-e '/^::P\(P\{1,\}\)::/{' \
+-e ' s//::\1::/' \
+-e ' G' \
+-e ' h' \
+-e ' d' \
+-e '}' \
+-e '/^::P::/{' \
+-e ' s//::0::/' \
+-e ' G' \
+-e '}' \
+-e 'b start' \
+-e ':needonemore' \
+-e 's/^/::P::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needtwomore' \
+-e 's/^/::PP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needthreemore' \
+-e 's/^/::PPP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':start' \
+-e '/^[^[:cntrl:]:]*:[[:digit:]]\{1,\}: LaTeX Error: File `/{' \
+-e ' s/\n//g' \
+-e ' b needonemore' \
+-e '}' \
+-e '/^::0::.*: LaTeX Error: File `/{' \
+-e ' /\n\n$$/{' \
+-e ' s/^::0:://' \
+-e ' b needonemore' \
+-e ' }' \
+-e ' s/\n\{1,\}/ /g' \
+-e ' s/[[:space:]]\{1,\}/ /g' \
+-e ' s/^.*File `//' \
+-e ' s/'"'"' not found\..*extensions: \([^[:space:]]*\).*/::::\1/' \
+-e ' h' \
+-e ' s/\(.*\)::::\(.*\)/# MISSING stem "\1" - allowed extensions are "\2" - leave comment here - it affects the build/' \
+-e ' p' \
+-e ' g' \
+-e ' s/::::.*//' \
+-e ' b addtargets' \
+-e '}' \
+-e 'd' \
+-e ':addtargets' \
+-e 's/[[:space:]]/\\\\\\&/g' \
+-e 'h' \
+-e 's/.*/-include &.gpi.d/' \
+-e 'p' \
+-e 'g' \
+-e 's!.*!$1.d: $$$$(call graphics-source,&)!' \
+-e 'p' \
+-e 's/.*//' \
+-e 'x' \
+-e 's!.*!$1.$(build_target_extension) $1._graphics: $$$$(call graphics-target,&)!' \
+-e 'p' \
+-e 'd' \
+$1.log
+endef
+
+# Checks for build failure due to pstex inclusion, and gives instructions.
+#
+# $(call die-on-pstexs,<parsed file>)
+define die-on-pstexs
+if $(EGREP) -q '^! LaTeX Error: File .*\.pstex.* not found' $1; then \
+ $(ECHO) "$(C_ERROR)Missing pstex_t file(s)$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR) make all-pstex$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \
+ exit 1; \
+fi
+endef
+
+# Checks for the use of import.sty and bails - we don't support subdirectories
+#
+# $(call die-on-import-sty,<log file>)
+define die-on-import-sty
+if $(EGREP) -s '/import.sty\)' '$1'; then \
+ $(ECHO) "$(C_ERROR)import.sty is not supported - included files must"; \
+ $(ECHO) "$(C_ERROR)be in the same directory as the primary document$(C_RESET)"; \
+ exit 1; \
+fi
+endef
+
+# Checks for build failure due to dot2tex, and gives instructions.
+#
+# $(call die-on-dot2tex,<parsed file>)
+define die-on-dot2tex
+if $(EGREP) -q ' LaTeX Error: File .*\.dot_t.* not found' $1; then \
+ $(ECHO) "$(C_ERROR)Missing dot_t file(s)$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR) make all-dot2tex$(C_RESET)"; \
+ $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \
+ exit 1; \
+fi
+endef
+
+# Checks for the existence of a .aux file, and dies with an error message if it
+# isn't there. Note that we pass the file stem in, not the full filename,
+# e.g., to check for foo.aux, we call it thus: $(call die-on-no-aux,foo)
+#
+# $(call die-on-no-aux,<aux stem>)
+define die-on-no-aux
+if [ ! -e '$1.aux' ]; then \
+ $(call colorize-latex-errors,$1.log); \
+ $(ECHO) "$(C_ERROR)Error: failed to create $1.aux$(C_RESET)"; \
+ exit 1; \
+fi
+endef
+
+# Outputs all index files to stdout. Arg 1 is the source file stem, arg 2 is
+# the list of targets for the discovered dependency.
+#
+# $(call get-log-index,<log file stem>,<target files>)
+define get-log-index
+$(SED) \
+-e 's/^No file \(.*\.ind\)\.$$/TARGETS=\1/' \
+-e 's/^No file \(.*\.[gn]ls\)\.$$/TARGETS=\1/' \
+-e 's/[[:space:]]/\\&/g' \
+-e '/^TARGETS=/{' \
+-e ' h' \
+-e ' s!^TARGETS=!$2: !p' \
+-e ' g' \
+-e ' s!^TARGETS=\(.*\)!\1: $1.tex!p' \
+-e '}' \
+-e 'd' \
+'$1.log' | $(SORT) | $(UNIQ)
+endef
+
+
+# Outputs all bibliography files to stdout. Arg 1 is the source stem, arg 2 is
+# a list of targets for each dependency found.
+#
+# The script kills all lines that do not contain bibdata. Remaining lines have
+# the \bibdata macro and delimiters removed to create a dependency list. A
+# trailing comma is added, then all adjacent commas are collapsed into a single
+# comma. Then commas are replaced with the string .bib[space], and the
+# trailing space is killed off. Finally, all filename spaces are escaped.
+# This produces a list of space-delimited .bib filenames, which is what the
+# make dep file expects to see.
+#
+# Note that we give kpsewhich a bogus argument so that a failure of sed to
+# produce output will not cause an error.
+#
+# $(call get-bibs,<aux file>,<targets>)
+define get-bibs
+$(SED) \
+-e '/^\\bibdata/!d' \
+-e 's/\\bibdata{\([^}]*\)}/\1,/' \
+-e 's/,\{2,\}/,/g' \
+-e 's/[[:space:]]/\\&/g' \
+-e 's/,/.bib /g' \
+-e 's/ \{1,\}$$//' \
+$1 | $(XARGS) $(KPSEWHICH) '#######' | \
+$(SED) \
+-e 's!^!$2: !' | \
+$(SORT) | $(UNIQ)
+endef
+
+# Makes a an aux file that only has stuff relevant to the target in it
+# $(call make-auxtarget-file,<flattened-aux>,<new-aux>)
+define make-auxtarget-file
+$(SED) \
+-e '/^\\newlabel/!d' \
+$1 > $2
+endef
+
+# Makes an aux file that only has stuff relevant to the bbl in it
+# $(call make-auxbbl-file,<flattened-aux>,<new-aux>)
+define make-auxbbl-file
+$(SED) \
+-e '/^\\newlabel/d' \
+$1 > $2
+endef
+
+# Makes a .gpi.d file from a .gpi file
+# $(call make-gpi-d,<.gpi>,<.gpi.d>)
+define make-gpi-d
+$(ECHO) '# vim: ft=make' > $2; \
+$(ECHO) 'ifndef INCLUDED_$(call cleanse-filename,$2)' >> $2; \
+$(ECHO) 'INCLUDED_$(call cleanse-filename,$2) := 1' >> $2; \
+$(call get-gpi-deps,$1,$(addprefix $(2:%.gpi.d=%).,$(GPI_OUTPUT_EXTENSION) gpi.d)) >> $2; \
+$(ECHO) 'endif' >> $2;
+endef
+
+# Parse .gpi files for data and loaded dependencies, output to stdout
+#
+# The sed script here tries to be clever about obtaining valid
+# filenames from the gpi file. It assumes that the plot command starts its own
+# line, which is not too difficult a constraint to satisfy.
+#
+# This command script also generates 'include' directives for every 'load'
+# command in the .gpi file. The load command must appear on a line by itself
+# and the file it loads must have the suffix .gpi. If you don't want it to be
+# compiled when running make graphics, then give it a suffix of ._include_.gpi.
+#
+# $(call get-gpi-deps,<gpi file>,<targets>)
+define get-gpi-deps
+$(SED) \
+-e '/^[[:space:]]*s\{0,1\}plot/,/[^\\]$$/{' \
+-e ' H' \
+-e ' /[^\\]$$/{' \
+-e ' s/.*//' \
+-e ' x' \
+-e ' s/\\\{0,1\}\n//g' \
+-e ' s/^[[:space:]]*s\{0,1\}plot[[:space:]]*\(\[[^]]*\][[:space:]]*\)*/,/' \
+-e ' s/[[:space:]]*\(['"'"'\'"'"''"'"'"][^'"'"'\'"'"''"'"'"]*['"'"'\'"'"''"'"'"]\)\{0,1\}[^,]*/\1/g' \
+-e ' s/,['"'"'\'"'"''"'"'"]-\{0,1\}['"'"'\'"'"''"'"'"]//g' \
+-e ' s/[,'"'"'\'"'"''"'"'"]\{1,\}/ /g' \
+-e ' s/.*:.*/$$(error Error: Filenames with colons are not allowed: &)/' \
+-e ' s!.*!$2: &!' \
+-e ' p' \
+-e ' }' \
+-e ' d' \
+-e '}' \
+-e 's/^[[:space:]]*load[[:space:]]*['"'"'\'"'"''"'"'"]\([^'"'"'\'"'"''"'"'"]*\.gpi\)['"'"'\'"'"''"'"'"].*$$/-include \1.d/p' \
+-e 'd' \
+'$1'
+endef
+
+# Colorizes real, honest-to-goodness LaTeX errors that can't be overcome with
+# recompilation.
+#
+# Note that we only ignore file not found errors for things that we know how to
+# build, like graphics files.
+#
+# Also note that the output of this is piped through sed again to escape any
+# backslashes that might have made it through. This is to avoid sending things
+# like "\right" to echo, which interprets \r as LF. In bash, we could just do
+# ${var//\\/\\\\}, but in other popular sh variants (like dash), this doesn't
+# work.
+#
+# $(call colorize-latex-errors,<log file>)
+define colorize-latex-errors
+$(SED) \
+-e '$${' \
+-e ' /^$$/!{' \
+-e ' H' \
+-e ' s/.*//' \
+-e ' }' \
+-e '}' \
+-e '/^$$/!{' \
+-e ' H' \
+-e ' d' \
+-e '}' \
+-e '/^$$/{' \
+-e ' x' \
+-e ' s/^\(\n\)\(.*\)/\2\1/' \
+-e '}' \
+-e '/^::P\(P\{1,\}\)::/{' \
+-e ' s//::\1::/' \
+-e ' G' \
+-e ' h' \
+-e ' d' \
+-e '}' \
+-e '/^::P::/{' \
+-e ' s//::0::/' \
+-e ' G' \
+-e '}' \
+-e 'b start' \
+-e ':needonemore' \
+-e 's/^/::P::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needtwomore' \
+-e 's/^/::PP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':needthreemore' \
+-e 's/^/::PPP::/' \
+-e 'G' \
+-e 'h' \
+-e 'd' \
+-e ':start' \
+-e '/^! LaTeX Error: File /{' \
+-e ' s/\n//g' \
+-e ' b needtwomore' \
+-e '}' \
+-e 's/^[^[:cntrl:]:]*:[[:digit:]]\{1,\}:/!!! &/' \
+-e 's/^\(.*\n\)\([^[:cntrl:]:]*:[[:digit:]]\{1,\}: .*\)/\1!!! \2/' \
+-e '/^!!! .* LaTeX Error: File /{' \
+-e ' s/\n//g' \
+-e ' b needonemore' \
+-e '}' \
+-e '/^::0::! LaTeX Error: File .*/{' \
+-e ' /\n\n$$/{' \
+-e ' s/^::0:://' \
+-e ' b needonemore' \
+-e ' }' \
+-e ' s/^::0::! //' \
+-e ' s/^\(.*not found.\).*Enter file name:.*\n\(.*[[:digit:]]\{1,\}\): Emergency stop.*/\2: \1/' \
+-e ' b error' \
+-e '}' \
+-e '/^::0::!!! .*LaTeX Error: File .*/{' \
+-e ' /\n\n$$/{' \
+-e ' s/^::0:://' \
+-e ' b needonemore' \
+-e ' }' \
+-e ' s/::0::!!! //' \
+-e ' /could not locate.*any of these extensions:/{' \
+-e ' d' \
+-e ' }' \
+-e ' s/\(not found\.\).*/\1/' \
+-e ' b error' \
+-e '}' \
+-e '/^\(.* LaTeX Error: Missing .begin.document.\.\).*/{' \
+-e ' s//\1 --- Are you trying to build an include file?/' \
+-e ' b error' \
+-e '}' \
+-e '/.*\(!!! .*Undefined control sequence\)[^[:cntrl:]]*\(.*\)/{' \
+-e ' s//\1: \2/' \
+-e ' s/\nl\.[[:digit:]][^[:cntrl:]]*\(\\[^\\[:cntrl:]]*\).*/\1/' \
+-e ' b error' \
+-e '}' \
+-e '/^\(!pdfTeX error:.*\)s*/{' \
+-e ' b error' \
+-e '}' \
+-e '/.*\(!!! .*\)/{' \
+-e ' s//\1/' \
+-e ' s/[[:cntrl:]]//' \
+-e ' s/[[:cntrl:]]$$//' \
+-e ' b error' \
+-e '}' \
+-e 'd' \
+-e ':error' \
+-e 's/^!\(!! \)\{0,1\}\(.*\)/$(C_ERROR)\2$(C_RESET)/' \
+-e 'p' \
+-e 'd' \
+'$1' | $(SED) -e 's/\\\\/\\\\\\\\/g'
+endef
+
+# Colorize Makeindex errors
+define colorize-makeindex-errors
+$(SED) \
+-e '/^!! /{' \
+-e ' N' \
+-e ' s/^.*$$/$(C_ERROR)&$(C_RESET)/' \
+-e ' p' \
+-e '}' \
+-e 'd' \
+'$1'
+endef
+
+# Colorize xindy errors
+# $(call colorize-xindy-errors,<log file>)
+define colorize-xindy-errors
+$(SED) \
+-e 's/^xindy:.*/$(C_ERROR)&$(C_RESET)/p' \
+-e 'd' \
+'$1'
+endef
+
+# Colorize epstopdf errors
+#
+# $(call colorize-epstopdf-errors,<log file>)
+define colorize-epstopdf-errors
+$(SED) \
+-e '/^Error:/,/^Execution stack:/{' \
+-e ' /^Execution stack:/d' \
+-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \
+-e ' p' \
+-e '}' \
+-e 'd' \
+'$1'
+endef
+
+# Colorize GNUplot errors
+#
+# $(call colorize-gnuplot-errors,<log file>)
+define colorize-gnuplot-errors
+$(SED) \
+-e '/, line [0-9]*:/!{' \
+-e ' H' \
+-e ' x' \
+-e ' s/.*\n\(.*\n.*\)$$/\1/' \
+-e ' x' \
+-e '}' \
+-e '/, line [0-9]*:/{' \
+-e ' H' \
+-e ' /unknown.*terminal type/{' \
+-e ' s/.*/--- Try changing the GNUPLOT_OUTPUT_EXTENSION variable to '"'"'eps'"'"'./' \
+-e ' H' \
+-e ' }' \
+-e ' /gpihead/{' \
+-e ' s/.*/--- This could be a Makefile bug - contact the maintainer./' \
+-e ' H' \
+-e ' }' \
+-e ' g' \
+-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \
+-e ' p' \
+-e '}' \
+-e '/^gnuplot>/,/^$$/{' \
+-e ' s/^gnuplot.*/$(C_ERROR)&/' \
+-e ' s/^$$/$(C_RESET)/' \
+-e ' p' \
+-e '}' \
+-e 'd' \
+$1
+endef
+
+# Colorize GraphViz errors
+#
+# $(call colorize-dot-errors,<log file>)
+define colorize-dot-errors
+$(SED) \
+-e 's/.*not found.*/$(C_ERROR)&$(C_RESET)/p' \
+-e '/^Error:/,/context:/s/.*/$(C_ERROR)&$(C_RESET)/p' \
+-e 's/^Warning:.*/$(C_WARNING)&$(C_RESET)/p' \
+-e 'd' \
+'$1'
+endef
+
+# Get all important .aux files from the top-level .aux file and merges them all
+# into a single file, which it outputs to stdout.
+#
+# $(call flatten-aux,<toplevel aux>,<output file>)
+define flatten-aux
+$(SED) \
+-e '/\\@input{\(.*\)}/{' \
+-e 's//\1/' \
+-e 's![.:]!\\&!g' \
+-e 'h' \
+-e 's!.*!\\:\\\\@input{&}:{!' \
+-e 'p' \
+-e 'x' \
+-e 's/\\././g' \
+-e 's/.*/r &/p' \
+-e 's/.*/d/p' \
+-e 's/.*/}/p' \
+-e 'd' \
+-e '}' \
+-e 'd' \
+'$1' > "$1.$$$$.sed.make"; \
+$(SED) -f "$1.$$$$.sed.make" '$1' > "$1.$$$$.make"; \
+$(SED) \
+-e '/^\\relax/d' \
+-e '/^\\bibcite/d' \
+-e 's/^\(\\newlabel{[^}]\{1,\}}\).*/\1/' \
+"$1.$$$$.make" | $(SORT) > '$2'; \
+$(call remove-temporary-files,$1.$$$$.make $1.$$$$.sed.make)
+endef
+
+# Generate pdf from postscript
+#
+# Note that we don't just call ps2pdf, since there are so many versions of that
+# script on various systems. Instead, we call the postscript interpreter
+# directly.
+#
+# $(call ps2pdf,infile,outfile,[embed fonts])
+define ps2pdf
+ $(GS) \
+ -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \
+ $(if $3,$(PS_EMBED_OPTIONS)) \
+ -q -dNOPAUSE -dBATCH \
+ -sDEVICE=pdfwrite -sstdout=%stderr \
+ '-sOutputFile=$2' \
+ -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \
+ $(if $3,$(PS_EMBED_OPTIONS)) \
+ -c .setpdfwrite \
+ -f '$1'
+endef
+
+# Colorize LaTeX output.
+color_tex := \
+$(SED) \
+-e '$${' \
+-e ' /^$$/!{' \
+-e ' H' \
+-e ' s/.*//' \
+-e ' }' \
+-e '}' \
+-e '/^$$/!{' \
+-e ' H' \
+-e ' d' \
+-e '}' \
+-e '/^$$/{' \
+-e ' x' \
+-e ' s/^\n//' \
+-e ' /Output written on /{' \
+-e ' s/.*Output written on \([^(]*\) (\([^)]\{1,\}\)).*/Success! Wrote \2 to \1/' \
+-e ' s/[[:digit:]]\{1,\}/$(C_PAGES)&$(C_RESET)/g' \
+-e ' s/Success!/$(C_SUCCESS)&$(C_RESET)/g' \
+-e ' s/to \(.*\)$$/to $(C_SUCCESS)\1$(C_RESET)/' \
+-e ' b end' \
+-e ' }' \
+-e ' / *LaTeX Error:.*/{' \
+-e ' s/.*\( *LaTeX Error:.*\)/$(C_ERROR)\1$(C_RESET)/' \
+-e ' b end' \
+-e ' }' \
+-e ' /.*Warning:.*/{' \
+-e ' s//$(C_WARNING)&$(C_RESET)/' \
+-e ' b end' \
+-e ' }' \
+-e ' /Underfull.*/{' \
+-e ' s/.*\(Underfull.*\)/$(C_UNDERFULL)\1$(C_RESET)/' \
+-e ' b end' \
+-e ' }' \
+-e ' /Overfull.*/{' \
+-e ' s/.*\(Overfull.*\)/$(C_OVERFULL)\1$(C_RESET)/' \
+-e ' b end' \
+-e ' }' \
+-e ' d' \
+-e ' :end' \
+-e ' G' \
+-e '}'
+
+# Colorize BibTeX output.
+color_bib := \
+$(SED) \
+-e 's/^Warning--.*/$(C_WARNING)&$(C_RESET)/' \
+-e 't' \
+-e '/---/,/^.[^:]/{' \
+-e ' H' \
+-e ' /^.[^:]/{' \
+-e ' x' \
+-e ' s/\n\(.*\)/$(C_ERROR)\1$(C_RESET)/' \
+-e ' p' \
+-e ' s/.*//' \
+-e ' h' \
+-e ' d' \
+-e ' }' \
+-e ' d' \
+-e '}' \
+-e '/(.*error.*)/s//$(C_ERROR)&$(C_RESET)/' \
+-e 'd'
+
+# Make beamer output big enough to print on a full page. Landscape doesn't
+# seem to work correctly.
+enlarge_beamer = $(PSNUP) -l -1 -W128mm -H96mm -pletter
+
+# $(call test-run-again,<source stem>)
+test-run-again = $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.)$$' $1.log
+
+# This tests whether the build target commands should be run at all, from
+# viewing the log file.
+# $(call test-log-for-need-to-run,<source stem>)
+define test-log-for-need-to-run
+$(SED) \
+-e '/^No file $(call escape-fname-regex,$1)\.aux\./d' \
+$1.log \
+| $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.|No file .+\.tex\.|LaTeX Warning: File.*)$$'
+endef
+
+# LaTeX invocations
+#
+# $(call latex,<tex file>,[<extra LaTeX args>])
+run-latex = $(latex_build_program) -interaction=batchmode -file-line-error $(if $2,$2,) $1 > /dev/null
+
+# $(call latex-color-log,<LaTeX stem>)
+latex-color-log = $(color_tex) $1.log
+
+# $(call run-makeindex,<input>,<output>,<log>,[.ist style file])
+define run-makeindex
+success=1; \
+if ! $(MAKEINDEX) -q $1 -t $3 -o $2 $(if $4,-s $4,) > /dev/null || $(EGREP) -q '^!!' $3; \
+then \
+ $(call colorize-makeindex-errors,$3); \
+ $(RM) -f '$2'; \
+ success=0; \
+fi; \
+[ "$$success" = "1" ] && $(sh_true) || $(sh_false);
+endef
+
+
+# $(call run-xindy,<input>,<output>,<module>,<log>)
+define run-xindy
+success=1; \
+if ! $(XINDY) -q -o $2 -L $(XINDYLANG) -C $(XINDYENC) -I xindy -M $3 -t $4 $1 > /dev/null || $(EGREP) -q '^xindy:' $4; then \
+ $(call colorize-xindy-errors,$4); \
+ $(RM) -f '$2'; \
+ success=0; \
+fi; \
+[ "$$success" = "1" ] && $(sh_true) || $(sh_false);
+endef
+
+# This runs the given script to generate output, and it uses MAKE_RESTARTS to
+# ensure that it never runs it more than once for a particular root make
+# invocation.
+#
+# $(call run-script,<interpreter>,<input>,<output>)
+define run-script
+[ ! -e '$2.cookie' ] && $(ECHO) "restarts=$(RESTARTS)" > $2.cookie && $(ECHO) "level=$(MAKELEVEL)" >> $2.cookie; \
+restarts=`$(SED) -n -e 's/^restarts=//p' $2.cookie`; \
+level=`$(SED) -n -e 's/^level=//p' $2.cookie`; \
+if $(EXPR) $(MAKELEVEL) '<=' $$level '&' $(RESTARTS) '<=' $$restarts >/dev/null; then \
+ $(call echo-build,$2,$3,$(RESTARTS)-$(MAKELEVEL)); \
+ $1 '$2' '$3'; \
+ $(ECHO) "restarts=$(RESTARTS)" > '$2.cookie'; \
+ $(ECHO) "level=$(MAKELEVEL)" >> '$2.cookie'; \
+fi
+endef
+
+# BibTeX invocations
+#
+# $(call run-bibtex,<tex stem>)
+run-bibtex = $(BIBTEX) $1 | $(color_bib)
+
+
+# $(call convert-eps-to-pdf,<eps file>,<pdf file>,[gray])
+# Note that we don't use the --filter flag because it has trouble with bounding boxes that way.
+define convert-eps-to-pdf
+$(if $3,$(CAT) '$1' | $(call kill-ps-color) > '$1.cookie',$(CP) '$1' '$1.cookie'); \
+$(EPSTOPDF) '$1.cookie' --outfile='$2' > $1.log; \
+$(call colorize-epstopdf-errors,$1.log);
+endef
+
+# $(call default-gpi-fontsize,<output file>)
+#
+# Find the default fontsize given the *output* file (it is based on the output extension)
+#
+default-gpi-fontsize = $(if $(filter %.pdf,$1),$(DEFAULT_GPI_PDF_FONTSIZE),$(DEFAULT_GPI_EPS_FONTSIZE))
+
+# $(call gpi-fontsize,<gpi file>,<output file>)
+#
+# Find out what the gnuplot fontsize should be. Tries, in this order:
+# - ##FONTSIZE comment in gpi file
+# - ##FONTSIZE comment in global gpi file
+# - default fontsize based on output type
+define gpi-fontsize
+$(strip $(firstword \
+ $(shell $(SED) -e 's/^\#\#FONTSIZE=\([[:digit:]]\{1,\}\)/\1/p' -e 'd' $1 $(strip $(gpi_global))) \
+ $(call default-gpi-fontsize,$2)))
+endef
+
+# $(call gpi-monochrome,<gpi file>,[gray])
+define gpi-monochrome
+$(strip $(if $2,monochrome,$(if $(shell $(EGREP) '^\#\#[[:space:]]*GRAY[[:space:]]*$$' $1 $(gpi_global)),monochrome,color)))
+endef
+
+# $(call gpi-font-entry,<output file>,<fontsize>)
+#
+# Get the font entry given the output file (type) and the font size. For PDF
+# it uses fsize or font, for eps it just uses the bare number.
+gpi-font-entry = $(if $(filter %.pdf,$1),$(subst FONTSIZE,$2,$(GPI_FSIZE_SYNTAX)),$2)
+
+# $(call gpi-terminal,<gpi file><output file>,[gray])
+#
+# Get the terminal settings for a given gpi and its intended output file
+define gpi-terminal
+$(if $(filter %.pdf,$2),pdf enhanced,postscript enhanced eps) \
+$(call gpi-font-entry,$2,$(call gpi-fontsize,$1,$2)) \
+$(call gpi-monochrome,$1,$3)
+endef
+
+# $(call gpi-embed-pdf-fonts,<input file>,<output file>)
+#
+define gpi-embed-pdf-fonts
+$(GS) \
+ -q \
+ -dSAFER \
+ -dNOPAUSE \
+ -dBATCH \
+ -sDEVICE=$(if $(filter pdf,$(GPI_OUTPUT_EXTENSION)),pdfwrite,pswrite) \
+ -sOutputFile='$2' \
+ -sstdout=%stderr \
+ -dCompatibilityLevel=1.5 \
+ -dPDFSETTINGS=/prepress \
+ -c .setpdfwrite \
+ -f '$1'
+endef
+
+# $(call convert-gpi,<gpi file>,<output file>,[gray])
+#
+define convert-gpi
+$(ECHO) 'set terminal $(call gpi-terminal,$1,$2,$3)' > $1head.make; \
+$(ECHO) 'set output "$2"' >> $1head.make; \
+$(if $(gpi_global),$(CAT) $(gpi_global) >> $1head.make;,) \
+fnames='$1head.make $1';\
+$(if $(gpi_sed),\
+ $(SED) -f '$(gpi_sed)' $$fnames > $1.temp.make; \
+ fnames=$1.temp.make;,\
+) \
+success=1; \
+if ! $(GNUPLOT) $$fnames 2>$1.log; then \
+ $(call colorize-gnuplot-errors,$1.log); \
+ success=0; \
+else \
+ if ! $(call gpi-embed-pdf-fonts,$2,$2.embed.make); then \
+ success = 0; \
+ else \
+ $(call move-if-exists,$2.embed.make,$2); \
+ fi; \
+fi; \
+$(if $(gpi_sed),$(call remove-temporary-files,$1.temp.make);,) \
+$(call remove-temporary-files,$1head.make); \
+[ "$$success" = "1" ] && $(sh_true) || $(sh_false);
+endef
+
+# Creation of .eps files from .png files
+#
+# The intermediate step of PNM (using NetPBM) produces much nicer output than
+# ImageMagick's "convert" binary. I couldn't get the right combination of
+# flags to make it look nice, anyway.
+#
+# To handle gray scale conversion, we pipe things through ppmtopgm in the
+# middle.
+#
+# $(call convert-png,<png file>,<eps file>)
+define convert-png
+$(PNGTOPNM) "$1" \
+ $(if $3,| $(PPMTOPGM),) \
+ | $(PNMTOPS) -noturn \
+ > "$2"
+endef
+
+# Creation of .eps files from .jpg/.jpeg files
+#
+# Thanks to brubakee for this solution.
+#
+# Uses Postscript level 2 to avoid file size bloat
+# $(call convert-jpg,<jpg file>,<eps file>)
+define convert-jpg
+$(CONVERT) $(if $3,-type Grayscale,) '$1' eps2:'$2'
+endef
+
+# Creation of .eps files from .fig files
+# $(call convert-fig,<fig file>,<output file>,[gray])
+convert-fig = $(FIG2DEV) -L $(if $(filter %.pdf,$2),pdf,eps) $(if $3,-N,) $1 $2
+
+# Creation of .pstex files from .fig files
+# $(call convert-fig-pstex,<fig file>,<pstex file>)
+convert-fig-pstex = $(FIG2DEV) -L pstex $1 $2 > /dev/null 2>&1
+
+# Creation of .pstex_t files from .fig files
+# $(call convert-fig-pstex-t,<fig file>,<pstex file>,<pstex_t file>)
+convert-fig-pstex-t = $(FIG2DEV) -L pstex_t -p $3 $1 $2 > /dev/null 2>&1
+
+# Creation of .dot_t files from .dot files
+# #(call convert-dot-tex,<dot file>,<dot_t file>)
+convert-dot-tex = $(DOT2TEX) '$1' > '$2'
+
+# Converts svg files into .eps files
+#
+# $(call convert-svg,<svg file>,<eps/pdf file>,[gray])
+convert-svg = $(INKSCAPE) --without-gui $(if $(filter %.pdf,$2),--export-pdf,--export-eps)='$2' '$1'
+
+# Converts xvg files into .eps files
+#
+# $(call convert-xvg,<xvg file>,<eps file>,[gray])
+convert-xvg = $(XMGRACE) '$1' -printfile - -hardcopy -hdevice $(if $3,-mono,) EPS > '$2'
+
+# Converts .eps.gz files into .eps files
+#
+# $(call convert-epsgz,<eps.gz file>,<eps file>,[gray])
+convert-epsgz = $(GUNZIP) -c '$1' $(if $3,| $(call kill-ps-color)) > '$2'
+
+# Converts .eps files into .eps files (usually a no-op, but can make grayscale)
+#
+# $(call convert-eps,<in file>,<out file>,[gray])
+convert-eps = $(if $3,$(call kill-ps-color) $1 > $2)
+
+# The name of the file containing special postscript commands for grayscale
+gray_eps_file := gray.eps.make
+
+# Changes sethsbcolor and setrgbcolor calls in postscript to always produce
+# grayscale. In general, this is accomplished by writing new versions of those
+# functions into the user dictionary space, which is looked up before the
+# global or system dictionaries (userdict is one of the permanent dictionaries
+# in postscript and is not read-only like systemdict).
+#
+# For setrgbcolor, the weighted average of the triple is computed and the
+# triple is replaced with three copies of that average before the original
+# procedure is called: .299R + .587G + .114B
+#
+# For sethsbcolor, the color is first converted to RGB, then to grayscale by
+# the new setrgbcolor operator as described above. Why is this done?
+# Because simply using the value component will tend to make pure colors
+# white, a very undesirable thing. Pure blue should not translate to white,
+# but to some level of gray. Conversion to RGB does the right thing. It's
+# messy, but it works.
+#
+# From
+# http://en.wikipedia.org/wiki/HSV_color_space#Transformation_from_HSV_to_RGB,
+# HSB = HSV (Value = Brightness), and the formula used to convert to RGB is
+# as follows:
+#
+# Hi = int(floor(6 * H)) mod 6
+# f = 6 * H - Hi
+# p = V(1-S)
+# q = V(1-fS)
+# t = V(1-(1-f)S)
+# if Hi = 0: R G B <-- V t p
+# if Hi = 1: R G B <-- q V p
+# if Hi = 2: R G B <-- p V t
+# if Hi = 3: R G B <-- p q V
+# if Hi = 4: R G B <-- t p V
+# if Hi = 5: R G B <-- V p q
+#
+# The messy stack-based implementation is below
+# $(call create-gray-eps-file,filename)
+define create-gray-eps-file
+$(ECHO) -n -e '\
+/OLDRGB /setrgbcolor load def\n\
+/setrgbcolor {\n\
+ .114 mul exch\n\
+ .587 mul add exch\n\
+ .299 mul add\n\
+ dup dup\n\
+ OLDRGB\n\
+} bind def\n\
+/OLDHSB /sethsbcolor load def\n\
+/sethsbcolor {\n\
+ 2 index % H V S H\n\
+ 6 mul floor cvi 6 mod % Hi V S H\n\
+ 3 index % H Hi V S H\n\
+ 6 mul % 6H Hi V S H\n\
+ 1 index % Hi 6H Hi V S H\n\
+ sub % f Hi V S H\n\
+ 2 index 1 % 1 V f Hi V S H\n\
+ 4 index % S 1 V f Hi V S H\n\
+ sub mul % p f Hi V S H\n\
+ 3 index 1 % 1 V p f Hi V S H\n\
+ 6 index % S 1 V p f Hi V S H\n\
+ 4 index % f S 1 V p f Hi V S H\n\
+ mul sub mul % q p f Hi V S H\n\
+ 4 index 1 1 % 1 1 V q p f Hi V S H\n\
+ 5 index % f 1 1 V q p f Hi V S H\n\
+ sub % (1-f) 1 V q p f Hi V S H\n\
+ 8 index % S (1-f) 1 V q p f Hi V S H\n\
+ mul sub mul % t q p f Hi V S H\n\
+ 4 -1 roll pop % t q p Hi V S H\n\
+ 7 -2 roll pop pop % t q p Hi V\n\
+ 5 -2 roll % Hi V t q p\n\
+ dup 0 eq\n\
+ {1 index 3 index 6 index}\n\
+ {\n\
+ dup 1 eq\n\
+ {3 index 2 index 6 index}\n\
+ {\n\
+ dup 2 eq\n\
+ {4 index 2 index 4 index}\n\
+ {\n\
+ dup 3 eq\n\
+ {4 index 4 index 3 index}\n\
+ {\n\
+ dup 4 eq\n\
+ {2 index 5 index 3 index}\n\
+ {\n\
+ dup 5 eq\n\
+ {1 index 5 index 5 index}\n\
+ {0 0 0}\n\
+ ifelse\n\
+ }\n\
+ ifelse\n\
+ }\n\
+ ifelse\n\
+ }\n\
+ ifelse\n\
+ }\n\
+ ifelse\n\
+ }\n\
+ ifelse % B G R Hi V t q p\n\
+ setrgbcolor\n\
+ 5 {pop} repeat\n\
+} bind def\n'\
+> $1
+endef
+
+# This actually inserts the color-killing code into a postscript file
+# $(call kill-ps-color)
+define kill-ps-color
+$(SED) -e '/%%EndComments/r $(gray_eps_file)'
+endef
+
+# Converts graphviz .dot files into .eps files
+# Grayscale is not directly supported by dot, so we pipe it through fig2dev in
+# that case.
+# $(call convert-dot,<dot file>,<eps file>,<log file>,[gray])
+define convert-dot
+$(DOT) -Tps '$1' 2>'$3' $(if $4,| $(call kill-ps-color)) > $2; \
+$(call colorize-dot-errors,$3)
+endef
+
+# Convert DVI to Postscript
+# $(call make-ps,<dvi file>,<ps file>,<log file>,[<paper size>])
+make-ps = \
+ $(DVIPS) -z -o '$2' $(if $(filter-out BEAMER,$4),-t$(firstword $4),) '$1' \
+ $(if $(filter BEAMER,$4),| $(enlarge_beamer)) > $3 2>&1
+
+# Convert Postscript to PDF
+# $(call make-pdf,<ps file>,<pdf file>,<log file>,<embed file>)
+make-pdf = \
+ $(call ps2pdf,$1,$2,$(filter 1,$(shell $(CAT) '$4'))) > '$3' 2>&1
+
+# Display information about what is being done
+# $(call echo-build,<input file>,<output file>,[<run number>])
+echo-build = $(ECHO) "$(C_BUILD)= $1 --> $2$(if $3, ($3),) =$(C_RESET)"
+echo-graphic = $(ECHO) "$(C_GRAPHIC)= $1 --> $2 =$(C_RESET)"
+echo-dep = $(ECHO) "$(C_DEP)= $1 --> $2 =$(C_RESET)"
+
+# Display a list of something
+# $(call echo-list,<values>)
+echo-list = for x in $1; do $(ECHO) "$$x"; done
+
+#
+# DEFAULT TARGET
+#
+
+.PHONY: all
+all: $(default_pdf_targets) ;
+
+.PHONY: all-pdf
+all-pdf: $(default_pdf_targets) ;
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+.PHONY: all-ps
+all-ps: $(default_ps_targets) ;
+
+.PHONY: all-dvi
+all-dvi: $(default_dvi_targets) ;
+endif
+
+#
+# VIEWING TARGET
+#
+.PHONY: show
+show: all
+ $(QUIET)for x in $(default_pdf_targets); do \
+ [ -e "$$x" ] && $(VIEW_PDF) $$x & \
+ done
+
+#
+# INCLUDES
+#
+source_includes := $(addsuffix .d,$(source_stems_to_include))
+graphic_includes := $(addsuffix .gpi.d,$(graphic_stems_to_include))
+
+# Check the version of the makefile
+ifneq "" "$(filter 3.79 3.80,$(MAKE_VERSION))"
+$(warning $(C_WARNING)Your version of make is too old. Please upgrade.$(C_RESET))
+endif
+
+# Include only the dependencies used
+ifneq "" "$(source_includes)"
+include $(source_includes)$(call include-message,$(source_includes))
+endif
+ifneq "" "$(graphic_includes)"
+include $(graphic_includes)$(call include-message,$(graphic_includes))
+endif
+
+#
+# MAIN TARGETS
+#
+
+# Note that we don't just say %: %.pdf here - this can tend to mess up our
+# includes, which detect what kind of file we are asking for. For example,
+# asking to build foo.pdf is much different than asking to build foo when
+# foo.gpi exists, because we look through all of the goals for *.pdf that
+# matches *.gpi, then use that to determine which include files we need to
+# build.
+#
+# Thus, we invoke make recursively with better arugments instead, restarting
+# all of the appropriate machinery.
+.PHONY: $(default_stems_ss)
+$(default_stems_ss): %: %.pdf ;
+
+# This builds and displays the wanted file.
+.PHONY: $(addsuffix ._show,$(stems_ssg))
+$(addsuffix ._show,$(stems_ssg)): %._show: %.pdf
+ $(QUIET)$(VIEW_PDF) $< &
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+.SECONDARY: $(all_pdf_targets)
+%.pdf: %.ps %.embed.make
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call make-pdf,$<,$@.temp,$@.log,$*.embed.make); \
+ if [ x"$$?" = x"0" ]; then \
+ $(if $(VERBOSE),$(CAT) $@.log,:); \
+ $(RM) -f '$@'; \
+ $(MV) '$@.temp' '$@'; \
+ $(TOUCH) '$@'; \
+ $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \
+ else \
+ $(CAT) $@.log; \
+ $(call remove-temporary-files,'$@.temp'); \
+ $(sh_false); \
+ fi
+
+.SECONDARY: $(all_ps_targets)
+%.ps: %.dvi %.paper.make
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call make-ps,$<,$@.temp,$@.log,\
+ $(firstword $(shell $(CAT) $*.paper.make))); \
+ if [ x"$$?" = x"0" ]; then \
+ $(if $(VERBOSE),$(CAT) $@.log,:); \
+ $(RM) -f '$@'; \
+ $(MV) '$@.temp' '$@'; \
+ $(TOUCH) '$@'; \
+ $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \
+ else \
+ $(CAT) $@.log; \
+ $(call remove-temporary-files,'$@.temp'); \
+ $(sh_false); \
+ fi
+endif
+
+# Build the final target (dvi or pdf) file. This is a very tricky rule because
+# of the way that latex runs multiple times, needs graphics after the first run
+# (or maybe already has them), and relies on bibliographies or indices that may
+# not exist.
+#
+# Check the log for fatal errors. If they exist, colorize and bail.
+#
+# Create the .auxtarget.cookie file. (Needed for next time if not present)
+#
+# If any of the following are true, we must rebuild at least one time:
+#
+# * the .bbl was recently rebuilt
+#
+# check a cookie, then delete it
+#
+# * any of several output files was created or changed:
+#
+# check $*.run.cookie, then delete it
+#
+# * the .aux file changed in a way that necessitates attention
+#
+# Note that if the .auxtarget.make file doesn't exist, this means
+# that we are doing a clean build, so it doesn't figure into the
+# test for running again.
+#
+# compare against .auxtarget.make
+#
+# move if different, remove if not
+#
+# * the .log file has errors or warnings requiring at least one more run
+#
+# We use a loop over a single item to simplify the process of breaking
+# out when we find one of the conditions to be true.
+#
+# If we do NOT need to run latex here, then we move the $@.1st.make file
+# over to $@ because the target file has already been built by the first
+# dependency run and is valid.
+#
+# If we do, we delete that cookie file and do the normal multiple-runs
+# routine.
+#
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+.SECONDARY: $(all_dvi_targets)
+endif
+%.$(build_target_extension): %.bbl %.aux %.$(build_target_extension).1st.make
+ $(QUIET)\
+ fatal=`$(call colorize-latex-errors,$*.log)`; \
+ if [ x"$$fatal" != x"" ]; then \
+ $(ECHO) "$$fatal"; \
+ exit 1; \
+ fi; \
+ $(call make-auxtarget-file,$*.aux.make,$*.auxtarget.cookie); \
+ run=0; \
+ for i in 1; do \
+ if $(call test-exists,$*.bbl.cookie); then \
+ run=1; \
+ break; \
+ fi; \
+ if $(call test-exists,$*.run.cookie); then \
+ run=1; \
+ break; \
+ fi; \
+ if $(call \
+ test-exists-and-different,$*.auxtarget.cookie,$*.auxtarget.make);\
+ then \
+ run=1; \
+ break; \
+ fi; \
+ if $(call test-log-for-need-to-run,$*); then \
+ run=1; \
+ break; \
+ fi; \
+ if [ ! -e $*.1st.*.make ]; then \
+ run=1; \
+ break; \
+ fi; \
+ done; \
+ $(call remove-temporary-files,$*.bbl.cookie $*.run.cookie); \
+ $(MV) $*.auxtarget.cookie $*.auxtarget.make; \
+ if [ x"$$run" = x"1" ]; then \
+ $(call remove-files,$@.1st.make); \
+ for i in 2 3 4 5; do \
+ $(if $(findstring 3.79,$(MAKE_VERSION)),\
+ $(call echo-build,$*.tex,$@,$(RESTARTS)-$$$$i),\
+ $(call echo-build,$*.tex,$@,$(RESTARTS)-$$i)\
+ ); \
+ $(call run-latex,$*); \
+ $(CP) '$*.log' '$*.'$(RESTARTS)-$$i'.log'; \
+ $(call test-run-again,$*) || break; \
+ done; \
+ else \
+ $(MV) '$@.1st.make' '$@'; \
+ fi; \
+ $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \
+ $(call latex-color-log,$*)
+
+# Build the .bbl file. When dependencies are included, this will (or will
+# not!) depend on something.bib, which we detect, acting accordingly. The
+# dependency creation also produces the %.auxbbl.make file. BibTeX is a bit
+# finicky about what you call the actual files, but we can rest assured that if
+# a .auxbbl.make file exists, then the .aux file does, as well. The
+# .auxbbl.make file is a cookie indicating whether the .bbl needs to be
+# rewritten. It only changes if the .aux file changes in ways relevant to .bbl
+# creation.
+#
+# Note that we do NOT touch the .bbl file if there is no need to
+# create/recreate it. We would like to leave existing files alone if they
+# don't need to be changed, thus possibly avoiding a rebuild trigger.
+%.bbl: %.auxbbl.make
+ $(QUIET)\
+ $(if $(filter %.bib,$^),\
+ $(call echo-build,$(filter %.bib,$?) $*.aux,$@); \
+ $(call run-bibtex,$*); \
+ $(TOUCH) $@.cookie; \
+ ) \
+ if $(EGREP) -q 'bibstyle.(apacite|apacann|chcagoa|[^}]*annot)' '$*.aux'; then \
+ $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-1); \
+ $(call run-latex,$*); \
+ $(CP) '$*.log' '$*.$(RESTARTS)-annotated.log'; \
+ $(if $(filter %.bib,$^),\
+ $(call echo-build,** annotated extra bibtex ** $(filter %.bib,$?) $*.aux,$@); \
+ $(call run-bibtex,$*); \
+ $(TOUCH) $@.cookie; \
+ ) \
+ $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-2); \
+ $(call run-latex,$*); \
+ fi
+
+# Create the index file - note that we do *not* depend on %.tex here, since
+# that unnecessarily restricts the kinds of indices that we can build to those
+# with exactly the same stem as the source file. Things like splitidx create
+# idx files with other names.
+#
+# Therefore, we add the .tex dependency in the sourcestem.d file in the call to
+# get index file dependencies from the logs.
+%.ind: %.idx
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call run-makeindex,$<,$@,$*.ilg)
+
+# Create a glossary file from a .ist file
+%.gls: %.glo %.tex %.ist
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call run-makeindex,$<,$@,$*.glg,$*.ist)
+
+# Create a glossary file from a glossary input formatted for xindy
+%.gls: %.glo %.tex %.xdy
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call run-xindy,$<,$@,$*,$*.glg)
+
+# Create the glossary file from a nomenclature file
+%.gls: %.glo %.tex nomencl.ist
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call run-makeindex,$<,$@,$*.glg,nomencl.ist)
+
+# Create the nomenclature file
+%.nls: %.nlo %.tex nomencl.ist
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call run-makeindex,$<,$@,$*.nlg,nomencl.ist)
+
+# SCRIPTED LaTeX TARGETS
+#
+# Keep the generated .tex files around for debugging if needed.
+.SECONDARY: $(all_tex_targets)
+
+%.tex:: %.tex.sh
+ $(QUIET)$(call run-script,$(SHELL),$<,$@)
+
+%.tex:: %.tex.py
+ $(QUIET)$(call run-script,$(PYTHON),$<,$@)
+
+%.tex:: %.tex.pl
+ $(QUIET)$(call run-script,$(PERL),$<,$@)
+
+%.tex:: %.rst $(RST_STYLE_FILE)
+ $(QUIET)\
+ $(call run-script,$(RST2LATEX)\
+ --documentoptions=letterpaper\
+ $(if $(RST_STYLE_FILE),--stylesheet=$(RST_STYLE_FILE),),$<,$@)
+
+#
+# GRAPHICS TARGETS
+#
+.PHONY: all-graphics
+all-graphics: $(all_graphics_targets);
+
+ifeq "$(strip $(BUILD_STRATEGY))" "latex"
+.PHONY: all-pstex
+all-pstex: $(all_pstex_targets);
+endif
+
+.PHONY: all-dot2tex
+all-dot2tex: $(all_dot2tex_targets);
+
+.PHONY: show-graphics
+show-graphics: all-graphics
+ $(VIEW_GRAPHICS) $(all_known_graphics)
+
+$(gray_eps_file):
+ $(QUIET)$(call echo-build,$^,$@)
+ $(QUIET)$(call create-gray-eps-file,$@)
+
+ifeq "$(strip $(BUILD_STRATEGY))" "pdflatex"
+%.pdf: %.eps $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-eps-to-pdf,$<,$@,$(GRAY))
+
+ifeq "$(strip $(GPI_OUTPUT_EXTENSION))" "pdf"
+%.pdf: %.gpi %.gpi.d $(gpi_sed) $(gpi_global)
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-gpi,$<,$@,$(GRAY))
+endif
+
+%.pdf: %.fig
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-fig,$<,$@,$(GRAY))
+
+%.pdf: %.svg
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-svg,$<,$@,$(GRAY))
+endif
+
+ifeq "$(strip $(BUILD_STRATEGY))" "xelatex"
+%.pdf: %.eps $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-eps-to-pdf,$<,$@,$(GRAY))
+
+ifeq "$(strip $(GPI_OUTPUT_EXTENSION))" "pdf"
+%.pdf: %.gpi %.gpi.d $(gpi_sed) $(gpi_global)
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-gpi,$<,$@,$(GRAY))
+endif
+
+%.pdf: %.fig
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-fig,$<,$@,$(GRAY))
+
+endif
+
+
+%.eps: %.gpi %.gpi.d $(gpi_sed) $(gpi_global)
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-gpi,$<,$@,$(GRAY))
+
+%.eps: %.fig
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-fig,$<,$@,$(GRAY))
+
+%.eps: %.dot $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-dot,$<,$@,$<.log,$(GRAY))
+
+%.eps: %.xvg $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-xvg,$<,$@,$(GRAY))
+
+ifneq "$(default_graphic_extension)" "pdf"
+# We have a perfectly good build rule for svg to pdf, so we eliminate this to
+# avoid confusing make (it sometimes chooses to go svg -> eps -> pdf).
+%.eps: %.svg $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-svg,$<,$@,$(GRAY))
+
+# Similarly for these, we don't need eps if we have supported extensions
+# already.
+%.eps: %.jpg $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-jpg,$<,$@,$(GRAY))
+
+%.eps: %.jpeg $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-jpg,$<,$@,$(GRAY))
+
+%.eps: %.png $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-png,$<,$@,$(GRAY))
+endif
+
+%.eps: %.eps.gz $(if $(GRAY),$(gray_eps_file))
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-epsgz,$<,$@,$(GRAY))
+
+%.pstex: %.fig
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-fig-pstex,$<,$@,$(GRAY))
+
+%.pstex_t: %.fig %.pstex
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-fig-pstex-t,$<,$@,$*.pstex,$(GRAY))
+
+%.dot_t: %.dot
+ $(QUIET)$(call echo-graphic,$^,$@)
+ $(QUIET)$(call convert-dot-tex,$<,$@)
+
+#
+# DEPENDENCY-RELATED TARGETS.
+#
+
+# Generate all of the information needed to get dependencies
+# As a side effect, this creates a .dvi or .pdf file (depending on the build
+# strategy). We need to be sure to remove it if there are errors. Errors can
+# take several forms and all of them are found within the log file:
+# * There was a LaTeX error
+# * A needed file was not found
+# * Cross references need adjustment
+#
+# Behavior:
+# This rule is responsible for generating the following:
+# %.aux
+# %.d
+# %.aux.make
+# %.(pdf|dvi).1st.make (the .pdf or .dvi output file, moved)
+#
+# Steps:
+#
+# Run latex
+# Move .pdf or .dvi somewhere else (make no judgements about success)
+# Flatten the .aux file into another file
+# Add source dependencies
+# Add graphic dependencies
+# Add bib dependencies
+#
+# Create cookies for various suffixes that may represent files that
+# need to be read by LaTeX in order for it to function properly.
+#
+# Note that if some of the dependencies are discovered because they turn
+# up missing in the log file, we really need the .d file to be reloaded.
+# Adding a sleep command helps with this. Otherwise make is extremely
+# nondeterministic, sometimes working, sometimes not.
+#
+# Usually we can force this by simply removing the generated pdf file and
+# not creating a .1st.make file..
+#
+%.$(build_target_extension).1st.make %.d %.aux %.aux.make %.fls: %.tex
+ $(QUIET)$(call echo-build,$<,$*.d $*.$(build_target_extension).1st.make,$(RESTARTS)-1)
+ $(QUIET)\
+ $(call run-latex,$<,-recorder) || $(sh_true); \
+ $(CP) '$*.log' '$*.$(RESTARTS)-1.log'; \
+ $(call die-on-import-sty,$*.log); \
+ $(call die-on-dot2tex,$*.log); \
+ $(call die-on-no-aux,$*); \
+ $(call flatten-aux,$*.aux,$*.aux.make); \
+ $(ECHO) "# vim: ft=make" > $*.d; \
+ $(ECHO) ".PHONY: $*._graphics" >> $*.d; \
+ $(call get-inputs,$*.fls,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \
+ $(call get-missing-inputs,$*.log,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \
+ $(ECHO) ".SECONDEXPANSION:" >> $*.d; \
+ $(call get-graphics,$*) >> $*.d; \
+ $(call get-log-index,$*,$(addprefix $*.,aux aux.make)) >> $*.d; \
+ $(call get-bibs,$*.aux.make,$(addprefix $*.,bbl aux aux.make)) >> $*.d; \
+ $(EGREP) -q "# MISSING" $*.d && $(SLEEP) 1 && $(RM) $*.pdf; \
+ $(call move-if-exists,$*.$(build_target_extension),$*.$(build_target_extension).1st.make); \
+ for s in toc out lot lof lol nav; do \
+ if [ -e "$*.$$s" ]; then \
+ if ! $(DIFF) -q $*.$$s $*.$$s.make >/dev/null 2>&1; then \
+ $(TOUCH) $*.run.cookie; \
+ fi; \
+ $(CP) $*.$$s $*.$$s.make; \
+ fi; \
+ done
+
+# This is a cookie that is updated if the flattened aux file has changed in a
+# way that affects the bibliography generation.
+.SECONDARY: $(addsuffix .auxbbl.make,$(stems_ssg))
+%.auxbbl.make: %.aux.make
+ $(QUIET)\
+ $(call make-auxbbl-file,$<,$@.temp); \
+ $(call replace-if-different-and-remove,$@.temp,$@)
+
+# Build a dependency file for .gpi files. These often plot data files that
+# also reside in the directory, so if a data file changes, it's nice to know
+# about it. This also handles loaded .gpi files, whose filename should have
+# _include_. in it.
+%.gpi.d: %.gpi
+ $(QUIET)$(call echo-build,$<,$@)
+ $(QUIET)$(call make-gpi-d,$<,$@)
+
+# Store the paper size for this document -- note that if beamer is used we set
+# it to the special BEAMER paper size. We only do this, however, if the
+# special comment exists, in which case we enlarge the output with psnup.
+#
+# The paper size is extracted from a documentclass attribute.
+%.paper.make: %.tex
+ $(QUIET)$(SED) \
+ -e '/\\documentclass/,/}/{' \
+ -e ' s/%.*//' \
+ -e ' H' \
+ -e ' /}/{' \
+ -e ' s/.*//' \
+ -e ' x' \
+ -e ' /\\documentclass/!d' \
+ -e ' s/[\n[:space:]]*//g' \
+ -e ' s/\([,{[]\)\([[:alnum:]]\{1,\}\)paper\([],}]\)/\1%-\2-%\3/g' \
+ -e ' s/\([,{[]\)\(landscape\)\([],}]\)/\1%-\2-%\3/g' \
+ -e ' s/^[^%]*%-//' \
+ -e ' s/-%[^%]*$$//' \
+ -e ' s/-%[^%]%-/ /g' \
+ -e ' p' \
+ -e ' }' \
+ -e ' d' \
+ -e '}' \
+ -e 'd' \
+ $< > $@; \
+ $(EGREP) -q '^[^%]*\\documentclass[^{]*{beamer}' $< && \
+ (\
+ $(EGREP) -q '^%%[[:space:]]*BEAMER[[:space:]]*LARGE$$' $< && \
+ $(ECHO) "BEAMER" > $@ || \
+ : > $@ \
+ ) || $(sh_true)
+
+# Store embedding instructions for this document using a special comment
+%.embed.make: %.tex
+ $(QUIET)$(EGREP) '^%%[[:space:]]*NO[[:space:]]*EMBED[[:space:]]*$$' $< \
+ && $(ECHO) '' > $@ \
+ || $(ECHO) '1' > $@;
+
+#
+# HELPFUL PHONY TARGETS
+#
+
+.PHONY: _all_programs
+_all_programs:
+ $(QUIET)$(ECHO) "== All External Programs Used =="
+ $(QUIET)$(call output-all-programs)
+
+.PHONY: _check_programs
+_check_programs:
+ $(QUIET)$(ECHO) "== Checking Makefile Dependencies =="; $(ECHO)
+ $(QUIET) \
+ allprogs=`\
+ ($(call output-all-programs)) | \
+ $(SED) \
+ -e 's/^[[:space:]]*//' \
+ -e '/^#/d' \
+ -e 's/[[:space:]]*#.*//' \
+ -e '/^=/s/[[:space:]]/_/g' \
+ -e '/^[[:space:]]*$$/d' \
+ -e 's/^[^=].*=[[:space:]]*\([^[:space:]]\{1,\}\).*$$/\\1/' \
+ `; \
+ spaces=' '; \
+ for p in $${allprogs}; do \
+ case $$p in \
+ =*) $(ECHO); $(ECHO) "$$p";; \
+ *) \
+ $(ECHO) -n "$$p:$$spaces" | $(SED) -e 's/^\(.\{0,20\}\).*$$/\1/'; \
+ loc=`$(WHICH) $$p`; \
+ if [ x"$$?" = x"0" ]; then \
+ $(ECHO) "$(C_SUCCESS)Found:$(C_RESET) $$loc"; \
+ else \
+ $(ECHO) "$(C_FAILURE)Not Found$(C_RESET)"; \
+ fi; \
+ ;; \
+ esac; \
+ done
+
+.PHONY: _check_gpi_files
+_check_gpi_files:
+ $(QUIET)$(ECHO) "== Checking all .gpi files for common errors =="; \
+ $(ECHO); \
+ for f in $(files.gpi); do \
+ result=`$(EGREP) '^([^#]*set terminal |set output )' $$f`; \
+ $(ECHO) -n "$$f: "; \
+ if [ x"$$result" = x"" ]; then \
+ $(ECHO) "$(C_SUCCESS)Okay$(C_RESET)"; \
+ else \
+ $(ECHO) "$(C_FAILURE)Warning: Problematic commands:$(C_RESET)";\
+ $(ECHO) "$(C_ERROR)$$result$(C_RESET)"; \
+ fi; \
+ done; \
+ $(ECHO)
+
+.PHONY: _all_stems
+_all_stems:
+ $(QUIET)$(ECHO) "== All Stems =="
+ $(QUIET)$(call echo-list,$(sort $(default_stems_ss)))
+
+.PHONY: _includes
+_includes:
+ $(QUIET)$(ECHO) "== Include Stems =="
+ $(QUIET)$(ECHO) "=== Sources ==="
+ $(QUIET)$(call echo-list,$(sort $(source_includes)))
+ $(QUIET)$(ECHO) "=== Graphics ==="
+ $(QUIET)$(call echo-list,$(sort $(graphic_includes)))
+
+.PHONY: _all_sources
+_all_sources:
+ $(QUIET)$(ECHO) "== All Sources =="
+ $(QUIET)$(call echo-list,$(sort $(all_files.tex)))
+
+.PHONY: _dependency_graph
+_dependency_graph:
+ $(QUIET)$(ECHO) "/* LaTeX Dependency Graph */"
+ $(QUIET)$(call output-dependency-graph)
+
+.PHONY: _show_dependency_graph
+_show_dependency_graph:
+ $(QUIET)$(call output-dependency-graph,$(graph_stem).dot)
+ $(QUIET)$(DOT) -Tps -o $(graph_stem).eps $(graph_stem).dot
+ $(QUIET)$(VIEW_POSTSCRIPT) $(graph_stem).eps
+ $(QUIET)$(call remove-temporary-files,$(graph_stem).*)
+
+.PHONY: _sources
+_sources:
+ $(QUIET)$(ECHO) "== Sources =="
+ $(QUIET)$(call echo-list,$(sort $(files.tex)))
+
+.PHONY: _scripts
+_scripts:
+ $(QUIET)$(ECHO) "== Scripts =="
+ $(QUIET)$(call echo-list,$(sort $(files_scripts)))
+
+.PHONY: _graphic_outputs
+_graphic_outputs:
+ $(QUIET)$(ECHO) "== Graphic Outputs =="
+ $(QUIET)$(call echo-list,$(sort $(all_graphics_targets)))
+
+.PHONY: _env
+_env:
+ifdef .VARIABLES
+ $(QUIET)$(ECHO) "== MAKE VARIABLES =="
+ $(QUIET)$(call echo-list,$(foreach var,$(sort $(.VARIABLES)),'$(var)'))
+endif
+ $(QUIET)$(ECHO) "== ENVIRONMENT =="
+ $(QUIET)$(ENV)
+
+#
+# CLEAN TARGETS
+#
+# clean-generated is somewhat unique - it relies on the .fls file being
+# properly built so that it can determine which of the files was generated, and
+# which was not. Expect it to silently fail if the .fls file is missing.
+#
+# This is used to, e.g., clean up index files that are generated by the LaTeX.
+.PHONY: clean-generated
+clean-generated:
+ $(QUIET)$(call clean-files,$(foreach e,$(addsuffix .fls,$(all_stems_source)),\
+ $(shell $(call get-generated-names,$e))))
+
+.PHONY: clean-deps
+clean-deps:
+ $(QUIET)$(call clean-files,$(all_d_targets) *.make *.make.temp *.cookie)
+
+.PHONY: clean-tex
+clean-tex: clean-deps
+ $(QUIET)$(call clean-files,$(rm_tex))
+
+.PHONY: clean-graphics
+# TODO: This *always* deletes pstex files, even if they were not generated by
+# anything.... In other words, if you create a pstex and pstex_t pair by hand
+# an drop them in here without the generating fig file, they will be deleted
+# and you won't get them back. It's a hack put in here because I'm not sure we
+# even want to keep pstex functionality, so my motivation is not terribly high
+# for doing it right.
+clean-graphics:
+ $(QUIET)$(call clean-files,$(all_graphics_targets) *.gpi.d *.pstex *.pstex_t *.dot_t)
+
+.PHONY: clean-backups
+clean-backups:
+ $(QUIET)$(call clean-files,$(backup_patterns) *.temp)
+
+.PHONY: clean-auxiliary
+clean-auxiliary:
+ $(QUIET)$(call clean-files,$(graph_stem).*)
+
+.PHONY: clean-nographics
+clean-nographics: clean-tex clean-deps clean-backups clean-auxiliary ;
+
+.PHONY: clean
+clean: clean-generated clean-tex clean-graphics clean-deps clean-backups clean-auxiliary ;
+
+#
+# HELP TARGETS
+#
+
+.PHONY: help
+help:
+ $(help_text)
+
+.PHONY: version
+version:
+ $(QUIET)\
+ $(ECHO) "$(fileinfo) Version $(version)"; \
+ $(ECHO) "by $(author)"; \
+
+#
+# HELP TEXT
+#
+
+define help_text
+# $(fileinfo) Version $(version)
+#
+# by $(author)
+#
+# Generates a number of possible output files from a LaTeX document and its
+# various dependencies. Handles .bib files, \include and \input, and .eps
+# graphics. All dependencies are handled automatically by running LaTeX over
+# the source.
+#
+# USAGE:
+#
+# make [GRAY=1] [VERBOSE=1] [SHELL_DEBUG=1] <target(s)>
+#
+# STANDARD OPTIONS:
+# GRAY:
+# Setting this variable forces all recompiled graphics to be grayscale.
+# It is useful when creating a document for printing. The default is
+# to allow colors. Note that it only changes graphics that need to be
+# rebuilt! It is usually a good idea to do a 'make clean' first.
+#
+# VERBOSE:
+# This turns off all @ prefixes for commands invoked by make. Thus,
+# you get to see all of the gory details of what is going on.
+#
+# SHELL_DEBUG:
+# This enables the -x option for sh, meaning that everything it does is
+# echoed to stderr. This is particularly useful for debugging
+# what is going on in $$(shell ...) invocations. One of my favorite
+# debugging tricks is to do this:
+#
+# make -d SHELL_DEBUG=1 VERBOSE=1 2>&1 | less
+#
+# KEEP_TEMP:
+# When set, this allows .make and other temporary files to stick around
+# long enough to do some debugging. This can be useful when trying to
+# figure out why gnuplot is not doing the right things, for example
+# (e.g., look for *head.make).
+#
+# STANDARD AUXILIARY FILES:
+#
+# Variables.ini (formerly Makefile.ini, which still works)
+#
+# This file can contain variable declarations that override various
+# aspects of the makefile. For example, one might specify
+#
+# neverclean := *.pdf *.ps
+# onlysources.tex := main.tex
+# LATEX_COLOR_WARNING := 'bold red uline'
+#
+# And this would override the neverclean setting to ensure that pdf
+# and ps files always remain behind, set the makefile to treat all
+# .tex files that are not "main.tex" as includes (and therefore not
+# default targets). It also changes the LaTeX warning output to be
+# red, bold, and underlined.
+#
+# There are numerous variables in this file that can be overridden in
+# this way. Search for '?=' to find them all.
+#
+# The Variables.ini is imported before *anything else* is done, so go
+# wild with your ideas for changes to this makefile in there. It
+# makes it easy to test them before submitting patches.
+#
+# If you're adding rules or targets, however, see Targets.ini below.
+#
+# Targets.ini
+#
+# This is included much later in the makefile, after all variables and
+# targets are defined. This is where you would put new make rules,
+# e.g.,
+#
+# generated.tex: generating_script.weird_lang depA depB
+# ./generating_script.weird_lang > $$@
+#
+# In this file, you have access to all of the variables that the
+# makefile creates, like $(onlysources.tex). While accessing those can
+# be somewhat brittle (they are implementation details and may change),
+# it is a great way to test your ideas when submitting feature requests.
+#
+# STANDARD ENVIRONMENT VARIABLES:
+#
+# LATEX_COLOR_WARNING '$(LATEX_COLOR_WARNING)'
+# LATEX_COLOR_ERROR '$(LATEX_COLOR_ERROR)'
+# LATEX_COLOR_UNDERFULL '$(LATEX_COLOR_UNDERFULL)'
+# LATEX_COLOR_OVERFULL '$(LATEX_COLOR_OVERFULL)'
+# LATEX_COLOR_PAGES '$(LATEX_COLOR_PAGES)'
+# LATEX_COLOR_BUILD '$(LATEX_COLOR_BUILD)'
+# LATEX_COLOR_GRAPHIC '$(LATEX_COLOR_GRAPHIC)'
+# LATEX_COLOR_DEP '$(LATEX_COLOR_DEP)'
+# LATEX_COLOR_SUCCESS '$(LATEX_COLOR_SUCCESS)'
+# LATEX_COLOR_FAILURE '$(LATEX_COLOR_FAILURE)'
+#
+# These may be redefined in your environment to be any of the following:
+#
+# black
+# red
+# green
+# yellow
+# blue
+# magenta
+# cyan
+# white
+#
+# Bold or underline may be used, as well, either alone or in combination
+# with colors:
+#
+# bold
+# uline
+#
+# Order is not important. You may want, for example, to specify:
+#
+# export LATEX_COLOR_SUCCESS='bold blue uline'
+#
+# in your .bashrc file. I don't know why, but you may want to.
+#
+# STANDARD TARGETS:
+#
+# all:
+# Make all possible documents in this directory. The documents are
+# determined by scanning for .tex and .tex.sh (described in more detail
+# later) and omitting any file that ends in ._include_.tex or
+# ._nobuild_.tex. The output is a set of .pdf files.
+#
+# If you wish to omit files without naming them with the special
+# underscore names, set the following near the top of the Makefile,
+# or (this is recommended) within a Makefile.ini in the same directory:
+#
+# includes.tex := file1.tex file2.tex
+#
+# This will cause the files listed to be considered as include files.
+#
+# If you have only few source files, you can set
+#
+# onlysources.tex := main.tex
+#
+# This will cause only the source files listed to be considered in
+# dependency detection. All other .tex files will be considered as
+# include files. Note that these options work for *any* source type,
+# so you could do something similar with includes.gpi, for example.
+# Note that this works for *any valid source* target. All of the
+# onlysources.* variables are commented out in the shipping version of
+# this file, so it does the right thing when they simply don't exist.
+# The comments are purely documentation. If you know, for example, that
+# file.mycoolformat is supported by this Makefile, but don't see the
+# "onlysources.mycoolformat" declared in the comments, that doesn't mean
+# you can't use it. Go ahead and set "onlysources.mycoolformat" and it
+# should do the right thing.
+#
+# show:
+# Builds and displays all documents in this directory. It uses the
+# environment-overridable value of VIEW_PDF (currently $(VIEW_PDF)) to
+# do its work.
+#
+# all-graphics:
+# Make all of the graphics in this directory.
+#
+# all-pstex (only for BUILD_STRATEGY=latex):
+# Build all fig files into pstex and pstex_t files. Gray DOES NOT WORK.
+#
+# all-gray-pstex (only for BUILD_STRATEGY=latex):
+# Build all fig files into grayscale pstex and pstex_t files.
+#
+# all-dot2tex:
+# Build all dot files into tex files.
+#
+# show-graphics:
+# Builds and displays all graphics in this directory. Uses the
+# environment-overridable value of VIEW_GRAPHICS (currently
+# $(VIEW_GRAPHICS)) to do its work.
+#
+# clean:
+# Remove ALL generated files, leaving only source intact.
+# This will *always* skip files mentioned in the "neverclean" variable,
+# either in this file or specified in Makefile.ini:
+#
+# neverclean := *.pdf *.ps
+#
+# The neverclean variable works on all "clean" targets below, as well.
+#
+# clean-graphics:
+# Remove all generated graphics files.
+#
+# clean-backups:
+# Remove all backup files: $(backup_patterns)
+# (XFig and other editors have a nasty habit of leaving them around)
+# Also removes Makefile-generated .temp files
+#
+# clean-tex:
+# Remove all files generated from LaTeX invocations except dependency
+# information. Leaves graphics alone.
+#
+# clean-deps:
+# Removes all auto-generated dependency information.
+#
+# clean-auxiliary:
+# Removes extra files created by various targets (like the dependency
+# graph output).
+#
+# clean-nographics:
+# Cleans everything *except* the graphics files.
+#
+# help:
+# This help text.
+#
+# version:
+# Version information about this LaTeX makefile.
+#
+# DEBUG TARGETS:
+#
+# _all_programs:
+# A list of the programs used by this makefile.
+#
+# _check_programs:
+# Checks your system for the needed software and reports what it finds.
+#
+# _check_gpi_files:
+# Checks the .gpi files in the current directory for common errors, such
+# as specification of the terminal or output file inside of the gpi file
+# itself.
+#
+# _dependency_graph:
+# Outputs a .dot file to stdout that represents a graph of LaTeX
+# dependencies. To see it, use the _show_dependency_graph target or
+# direct the output to a file, run dot on it, and view the output, e.g.:
+#
+# make _dependency_graph > graph.dot
+# dot -T ps -o graph.eps graph.dot
+# gv graph.eps
+#
+# _show_dependency_graph:
+# Makes viewing the graph simple: extracts, builds and displays the
+# dependency graph given in the _dependency_graph target using the value
+# of the environment-overridable VIEW_POSTSCRIPT variable (currently set
+# to $(VIEW_POSTSCRIPT)). The postscript viewer is used because it
+# makes it easier to zoom in on the graph, a critical ability for
+# something so dense and mysterious.
+#
+# _all_sources:
+# List all .tex files in this directory.
+#
+# _sources:
+# Print out a list of all compilable sources in this directory. This is
+# useful for determining what make thinks it will be using as the
+# primary source for 'make all'.
+#
+# _scripts:
+# Print out a list of scripts that make knows can be used to generate
+# .tex files (described later).
+#
+# _all_stems:
+# Print a list of stems. These represent bare targets that can be
+# executed. Listing <stem> as a bare target will produce <stem>.pdf.
+#
+# _includes:
+# A list of .d files that would be included in this run if _includes
+# weren't specified. This target may be used alone or in conjunction
+# with other targets.
+#
+# _graphic_outputs:
+# A list of all generated .eps files
+#
+# _env:
+# A list of environment variables and their values. If supported by
+# your version of make, also a list of variables known to make.
+#
+# FILE TARGETS:
+#
+# %, %.pdf:
+# Build a PDF file from the corresponding %.tex file.
+#
+# If BUILD_STRATEGY=pdflatex, then this builds the pdf directly.
+# Otherwise, it uses this old-school but effective approach:
+#
+# latex -> dvips -> ps2pdf
+#
+# The BUILD_STRATEGY can be overridden in Makefile.ini in the same
+# directory. The default is pdflatex.
+#
+# Reasons for using latex -> dvips include the "psfrag" package, and the
+# generation of postscript instead of PDF. Arguments for using pdflatex
+# include "new and shiny" and "better supported." I can't argue with
+# either of those, and supporting them both didn't turn out to be that
+# difficult, so there you have it. Choices.
+#
+# %._show:
+# A phony target that builds the pdf file and then displays it using the
+# environment-overridable value of VIEW_PDF ($(VIEW_PDF)).
+#
+# %._graphics:
+# A phony target that generates all graphics on which %.pdf (or %.dvi)
+# depends.
+#
+# %.ps (only for BUILD_STRATEGY=latex):
+# Build a Postscript file from the corresponding %.tex file.
+# This is done using dvips. Paper size is automatically
+# extracted from the declaration
+#
+# \documentclass[<something>paper]
+#
+# or it is the system default.
+#
+# If using beamer (an excellent presentation class), the paper
+# size is ignored. More on this later.
+#
+# %.dvi (only for BUILD_STRATEGY=latex):
+# Build the DVI file from the corresponding %.tex file.
+#
+# %.ind:
+# Build the index for this %.tex file.
+#
+# %.gls:
+# Build the nomenclature glossary for this %.tex file.
+#
+# %.nls:
+# Build the (newer) nomenclature file for this %.tex file.
+#
+# %.eps:
+# Build an eps file from one of the following file types:
+#
+# .dot : graphviz
+# .gpi : gnuplot
+# .fig : xfig
+# .xvg : xmgrace
+# .svg : scalable vector graphics (goes through inkscape)
+# .png : png (goes through NetPBM)
+# .jpg : jpeg (goes through ImageMagick)
+# .eps.gz : gzipped eps
+#
+# The behavior of this makefile with each type is described in
+# its own section below.
+#
+# %.pstex{,_t} (only for BUILD_STRATEGY=latex):
+# Build a .pstex_t file from a .fig file.
+#
+# FEATURES:
+#
+# Optional Binary Directory:
+# If you create the _out_ directory in the same place as the makefile,
+# it will automatically be used as a dumping ground for .pdf (or .dvi,
+# .ps, and .pdf) output files.
+#
+# Alternatively, you can set the BINARY_TARGET_DIR variable, either as a
+# make argument or in Makefile.ini, to point to your directory of
+# choice. Note that no pathname wildcard expansion is done in the
+# makefile, so make sure that the path is complete before going in
+# there. E.g., if you want to specify something in your home directory,
+# use $$HOME/ instead of ~/ so that the shell expands it before it gets
+# to the makefile.
+#
+# External Program Dependencies:
+# Every external program used by the makefile is represented by an
+# ALLCAPS variable at the top of this file. This should allow you to
+# make judgments about whether your system supports the use of this
+# makefile. The list is available in the ALL_PROGRAMS variable and,
+# provided that you are using GNU make 3.80 or later (or you haven't
+# renamed this file to something weird like "mylatexmakefile" and like
+# invoking it with make -f) can be viewed using
+#
+# make _all_programs
+#
+# Additionally, the availability of these programs can be checked
+# automatically for you by running
+#
+# make _check_programs
+#
+# The programs are categorized according to how important they are and
+# what function they perform to help you decide which ones you really
+# need.
+#
+# Colorized Output:
+# The output of commands is colorized to highlight things that are often
+# important to developers. This includes {underfull,overfull}
+# {h,v}boxes, general LaTeX Errors, each stage of document building, and
+# the number of pages in the final document. The colors are obtained
+# using 'tput', so colorization should work pretty well on any terminal.
+#
+# The colors can be customized very simply by setting any of the
+# LATEX_COLOR_<CONTEXT> variables in your environment (see above).
+#
+# Predecessors to TeX Files:
+# Given a target <target>, if no <target>.tex file exists but a
+# corresponding script or predecessor file exists, then appropriate
+# action will be taken to generate the tex file.
+#
+# Currently supported script or predecessor languages are:
+#
+# sh: %.tex.sh
+# perl: %.tex.pl
+# python: %.tex.py
+#
+# Calls the script using the appropriate interpreter, assuming that
+# its output is a .tex file.
+#
+# The script is called thus:
+#
+# <interpreter> <script file name> <target tex file>
+#
+# and therefore sees exactly one parameter: the name of the .tex
+# file that it is to create.
+#
+# Why does this feature exist? I ran into this while working on
+# my paper dissertation. I wrote a huge bash script that used a
+# lot of sed to bring together existing papers in LaTeX. It
+# would have been nice had I had something like this to make my
+# life easier, since as it stands I have to run the script and
+# then build the document with make. This feature provides hooks
+# for complicated stuff that you may want to do, but that I have
+# not considered. It should work fine with included dependencies,
+# too.
+#
+# Scripts are run every time make is invoked. Some trickery is
+# employed to make sure that multiple restarts of make don't cause
+# them to be run again.
+#
+# reST: %.rst
+#
+# Runs the reST to LaTeX converter to generate a .tex file
+# If it finds a file names _rststyle_._include_.tex, uses it as
+# the "stylesheet" option to rst2latex.
+#
+# Note that this does not track sub-dependencies in rst files. It
+# assumes that the top-level rst file will change if you want a
+# rebuild.
+#
+# Dependencies:
+#
+# In general, dependencies are extracted directly from LaTeX output on
+# your document. This includes
+#
+# * Bibliography information
+# * \include or \input files (honoring \includeonly, too)
+# * Graphics files inserted by the graphicx package
+#
+# Where possible, all of these are built correctly and automatically.
+# In the case of graphics files, these are generated from the following
+# file types:
+#
+# GraphViz: .dot
+# GNUPlot: .gpi
+# XFig: .fig
+# XMgrace: .xvg
+# SVG: .svg
+# PNG: .png
+# JPEG: .jpg
+# GZipped EPS: .eps.gz
+#
+# If the file exists as a .eps already, it is merely used (and will not
+# be deleted by 'clean'!).
+#
+# LaTeX and BibTeX are invoked correctly and the "Rerun to get
+# cross-references right" warning is heeded a reasonable number of
+# times. In my experience this is enough for even the most troublesome
+# documents, but it can be easily changed (if LaTeX has to be run after
+# BibTeX more than three times, it is likely that something is moving
+# back and forth between pages, and no amount of LaTeXing will fix
+# that).
+#
+# \includeonly is honored by this system, so files that are not
+# specified there will not trigger a rebuild when changed.
+#
+# Beamer:
+# A special TeX source comment is recognized by this makefile (only when
+# BUILD_STRATEGY=latex, since this invokes psnup):
+#
+# %%[[:space:]]*BEAMER[[:space:]]*LARGE
+#
+# The presence of this comment forces the output of dvips through psnup
+# to enlarge beamer slides to take up an entire letter-sized page. This
+# is particularly useful when printing transparencies or paper versions
+# of the slides. For some reason landscape orientation doesn't appear
+# to work, though.
+#
+# If you want to put multiple slides on a page, use this option and then
+# print using mpage, a2ps, or psnup to consolidate slides. My personal
+# favorite is a2ps, but your mileage may vary.
+#
+# When beamer is the document class, dvips does NOT receive a paper size
+# command line attribute, since beamer does special things with sizes.
+#
+# GNUPlot Graphics:
+# When creating a .gpi file, DO NOT INCLUDE the "set terminal" or "set
+# output" commands! The makefile will include terminal information for
+# you. Besides being unnecessary and potentially harmful, including the
+# terminal definition in the .gpi file makes it harder for you, the one
+# writing the document, to preview your graphics, e.g., with
+#
+# gnuplot -persist myfile.gpi
+#
+# so don't do specify a terminal or an output file in your .gpi files.
+#
+# When building a gpi file into an eps file, there are several features
+# available to the document designer:
+#
+# Global Header:
+# The makefile searches for the files in the variable GNUPLOT_GLOBAL
+# in order:
+#
+# ($(GNUPLOT_GLOBAL))
+#
+# Only the first found is used. All .gpi files in the directory are
+# treated as though the contents of GNUPLOT_GLOBAL were directly
+# included at the top of the file.
+#
+# NOTE: This includes special comments! (see below)
+#
+# Font Size:
+# A special comment in a .gpi file (or a globally included file) of
+# the form
+#
+# ## FONTSIZE=<number>
+#
+# will change the font size of the GPI output. If font size is
+# specified in both the global file and the GPI file, the
+# specification in the individual GPI file is used.
+#
+# Grayscale Output:
+# GNUplot files also support a special comment to force them to be
+# output in grayscale *no matter what*:
+#
+# ## GRAY
+#
+# This is not generally advisable, since you can always create a
+# grayscale document using the forms mentioned above. But, if your
+# plot simply must be grayscale even in a document that allows
+# colors, this is how you do it.
+#
+# XFig Graphics:
+# No special handling is done with XFig, except when a global
+# grayscale method is used, e.g.
+#
+# make GRAY=1 document
+#
+# In these cases the .eps files is created using the -N switch to
+# fig2dev to turn off color output. (Only works with eps, not pstex
+# output)
+#
+# GraphVis Graphics:
+# Color settings are simply ignored here. The 'dot' program is used
+# to transform a .dot file into a .eps file.
+#
+# If you want, you can use the dot2tex program to convert dot files
+# to tex graphics. The default is to just call dot2tex with no
+# arguments, but you can change the DOT2TEX definition to include
+# options as needed (in your Makefile.ini).
+#
+# Note that, as with pstex, the makefile cannot use latex's own
+# output to discover all missing dot_t (output) files, since anytime
+# TeX includes TeX, it has to bail when it can't find the include
+# file. It can therefore only stop on the first missing file it
+# discovers, and we can't get a large list of them out easily.
+#
+# So, the makefile errors out if it's missing an included dot_t
+# file, then prompts the user to run this command manually:
+#
+# make all-dot2tex
+#
+# GZipped EPS Graphics:
+#
+# A .eps.gz file is sometimes a nice thing to have. EPS files can get
+# very large, especially when created from bitmaps (don't do this if you
+# don't have to). This makefile will unzip them (not in place) to
+# create the appropriate EPS file.
+#
+#
+endef
+
+#
+# DEPENDENCY CHART:
+#
+# digraph "g" {
+# rankdir=TB
+# size="9,9"
+# edge [fontsize=12 weight=10]
+# node [shape=box fontsize=14 style=rounded]
+#
+# eps [
+# shape=Mrecord
+# label="{{<gpi> GNUplot|<epsgz> GZip|<dot> Dot|<fig> XFig}|<eps> eps}"
+# ]
+# pstex [label="%.pstex"]
+# pstex_t [label="%.pstex_t"]
+# tex_outputs [shape=point]
+# extra_tex_files [shape=point]
+# gpi_data [label="<data>"]
+# gpi_includes [label="_include_.gpi"]
+# aux [label="%.aux"]
+# fls [label="%.fls"]
+# idx [label="%.idx"]
+# glo [label="%.glo"]
+# ind [label="%.ind"]
+# log [label="%.log"]
+# tex_sh [label="%.tex.sh"]
+# rst [label="%.rst"]
+# tex [
+# shape=record
+# label="<tex> %.tex|<include> _include_.tex"
+# ]
+# include_aux [label="_include_.aux"]
+# file_bib [label=".bib"]
+# bbl [label="%.bbl"]
+# dvi [label="%.dvi"]
+# ps [label="%.ps"]
+# pdf [label="%.pdf"]
+# fig [label=".fig"]
+# dot [label=".dot"]
+# gpi [label=".gpi"]
+# eps_gz [label=".eps.gz"]
+#
+# gpi_files [shape=point]
+#
+# rst -> tex:tex [label="reST"]
+# tex_sh -> tex:tex [label="sh"]
+# tex_pl -> tex:tex [label="perl"]
+# tex_py -> tex:tex [label="python"]
+# tex -> tex_outputs [label="latex"]
+# tex_outputs -> dvi
+# tex_outputs -> aux
+# tex_outputs -> log
+# tex_outputs -> fls
+# tex_outputs -> idx
+# tex_outputs -> include_aux
+# aux -> bbl [label="bibtex"]
+# file_bib -> bbl [label="bibtex"]
+# idx -> ind [label="makeindex"]
+# glo -> gls [label="makeindex"]
+# nlo -> nls [label="makeindex"]
+# gls -> extra_tex_files
+# nls -> extra_tex_files
+# ind -> extra_tex_files
+# bbl -> extra_tex_files
+# eps -> extra_tex_files
+# extra_tex_files -> dvi [label="latex"]
+# gpi_files -> eps:gpi [label="gnuplot"]
+# gpi -> gpi_files
+# gpi_data -> gpi_files
+# gpi_includes -> gpi_files
+# eps_gz -> eps:epsgz [label="gunzip"]
+# fig -> eps:fig [label="fig2dev"]
+# fig -> pstex [label="fig2dev"]
+# fig -> pstex_t [label="fig2dev"]
+# pstex -> pstex_t [label="fig2dev"]
+# dot -> eps:dot [label="dot"]
+# dvi -> ps [label="dvips"]
+# include_aux -> bbl [label="bibtex"]
+# ps -> pdf [label="ps2pdf"]
+#
+# edge [ color=blue label="" style=dotted weight=1 fontcolor=blue]
+# fls -> tex:include [label="INPUT: *.tex"]
+# fls -> file_bib [label="INPUT: *.aux"]
+# aux -> file_bib [label="\\bibdata{...}"]
+# include_aux -> file_bib [label="\\bibdata{...}"]
+# log -> gpi [label="Graphic file"]
+# log -> fig [label="Graphic file"]
+# log -> eps_gz [label="Graphic file"]
+# log -> dot [label="Graphic file"]
+# log -> idx [label="No file *.ind"]
+# log -> glo [label="No file *.gls"]
+# log -> nlo [label="No file *.nls"]
+# gpi -> gpi_data [label="plot '...'"]
+# gpi -> gpi_includes [label="load '...'"]
+# tex:tex -> ps [label="paper"]
+# tex:tex -> pdf [label="embedding"]
+# }
+#
+
+#
+# DEPENDENCY CHART SCRIPT
+#
+# $(call output_dependency_graph,[<output file>])
+define output-dependency-graph
+ if [ -f '$(this_file)' ]; then \
+ $(SED) \
+ -e '/^[[:space:]]*#[[:space:]]*DEPENDENCY CHART:/,/^$$/!d' \
+ -e '/DEPENDENCY CHART/d' \
+ -e '/^$$/d' \
+ -e 's/^[[:space:]]*#//' \
+ $(this_file) $(if $1,> '$1',); \
+ else \
+ $(ECHO) "Cannot determine the name of this makefile."; \
+ fi
+endef
+#
+.PHONY: Targets.ini $(HOME)/.latex-makefile/Targets.ini
+-include Targets.ini
+-include $(HOME)/.latex-makefile/Targets.ini
+#
+# vim: noet sts=0 sw=8 ts=8
+
diff --git a/bib b/bib
new file mode 160000
+Subproject a819050e30bb6906858165796655c0c726843a3
diff --git a/cv.tex b/cv.tex
new file mode 100644
index 0000000..87ee4ab
--- /dev/null
+++ b/cv.tex
@@ -0,0 +1,76 @@
+%\documentclass[localFont,alternative,10pt,compact,monochrome]{yaac-another-awesome-cv}
+%\documentclass[dsvariant,alternative,12pt,compact,monochrome]{yaac-another-awesome-cv}
+\documentclass[dsvariant,alternative,12pt,compact]{yaac-another-awesome-cv}
+\name{Dr. Suren A. Chilingaryan}{}
+\tagline{Data Processing and Performance Expert | Lead of Cloud Computing }
+\addbibresource{bib/csa.bib}
+\addbibresource{bib/csaproc.bib}
+
+\socialinfo{
+ \email{csa@suren.me}
+% \smartphone{+49 (176) 438-53094}
+ \skype{csa8000}
+ \website{http://suren.me}{suren.me}
+ \vspace{0.5em}
+
+ \scholar{0Qa5rG8AAAAJ}{Scholar}\\
+% \orcid{0000-0002-2909-6363}{OrcID}
+ \linkedin{suren-chilingaryan-5501636}
+% \rg{Suren-Chilingaryan-2}{ResearchGate}
+}
+
+\headermsg{
+ I do research in high-performance and heterogeneous computing and I apply it to architect online systems for scientific instrumentation.
+ With improvements in detector technology, I believe the new approaches are required to keep the pace with increasing data rates.
+ Codesign of detector, software, and analysis algorithms is often a key for successful projects.
+ %With deep knowledge across computer science and IT technology, I can grasp complex systems as a whole and pay attention to the performance of critical components.
+ Currently, I lead an effort to adopt cloud technologies for data acquisition and control systems.
+}
+
+
+%\photo{2.5cm}{darwiin.png}
+%\socialinfo{
+% \linkedin{christopheroger}
+% \github{darwiin}\\
+% \smartphone{+687 831 831}
+% \email{christophe.roger@mail.com}\\
+% \address{17 Rue de Bretagne, 98835 Dumbéa, Nouvelle-Calédonie}\\
+% \infos{Né le 23 septembre 1982 (35 ans) à Nouméa, Nouvelle-Calédonie}
+%}
+
+% Uncomment the following line and use a value from 1.5cm to 2.5cm
+%\setleftcolumnlength{2.5cm}
+
+
+\begin{document}
+
+ \makecvheader
+
+% \makecvfooter
+% {\selectlanguage{english}\today}
+% {\textsc{Suren A. Chilingaryan - CV}}
+% {\thepage}
+
+
+ \input{section_competences}
+ \input{section_employment}
+ \input{section_education}
+ \input{section_academic}
+% \input{section_skills}
+
+ \newpage
+ \input{section_experiments}
+ \input{section_funding}
+ \input{section_leadership}
+ \input{section_responsibilities}
+ \input{section_software}
+ \input{section_research}
+ \input{section_supervision}
+% \input{section_references} % Section références
+
+ \newpage
+ \printbibliography[title={\textsc{Selected publications}}]
+
+ \newpage
+ \input{section_presentations}
+\end{document} \ No newline at end of file
diff --git a/section_academic.tex b/section_academic.tex
new file mode 100644
index 0000000..88eea14
--- /dev/null
+++ b/section_academic.tex
@@ -0,0 +1,15 @@
+\subtitle{Academic achievments}{\faTasks}
+
+\begin{categories}
+ \category{Experiments} {\makecell{Member of \refexp{KATRIN}, \refexp{PANDAS}, \refexp{SEVAN} collaborations,\\ contributed to \refexp{CMS}, Edelweiss, \refexp{KIT Cube}}}
+ \category{Collaborations} {\refexp{ASEC}, \reffac{ESRF}, \refuni{Desy}, \refcol{TPU}, \refcol{SCI}, \refcol{CCPi Network}} %\refuni{University of Manchester}}
+ \category{Funding} {\makecell{Contributing author to BMBF grants \hyperlink{proj:ADEI}{01DK13019} (15 k€),\\ \hyperlink{proj:UFO}{05K10CKB} and \hyperlink{proj:UFO}{05K10VKE} (2.5 m€ total)}}
+ \category{Projects} {Maintain 5 software frameworks, coordinated and developed - 12}
+ \category{Supervision} {\makecell{Supervise 2 PhD students, co-supervised 4 PhD students (2 graduated),\\ 10 Master students and 20 internships}}
+ \category{Tutoring} {\makecell{GPU programming tutorials at summer schools,\\ seminar on advanced topics in parallel programming}}
+ \category{Publications} {\orcidlink{0000-0002-2909-6363}{59 peer-reviewed publications}, \scholarlink{0Qa5rG8AAAAJ}{h-rank: 18}}
+ \category{Presentations} {7 invited talks, 10 conference talks, 15 seminars}
+\end{categories}
+
+
+%edelweiss?
diff --git a/section_competences.tex b/section_competences.tex
new file mode 100644
index 0000000..08f219d
--- /dev/null
+++ b/section_competences.tex
@@ -0,0 +1,10 @@
+\subtitle{Areas of expertise}{\faTasks}
+
+\begin{categories}
+ \category{}{High performance computing}
+ \category{}{Distributed data acquisition and control systems}
+ \category{}{Performance analysis and software optimization techniques}
+ \category{}{Parallel algorithms and parallel hardware architectures}
+ \category{}{Low-latency communication in heterogeneous systems}
+ \category{}{Cloud-based data management and visualization}
+\end{categories}
diff --git a/section_education.tex b/section_education.tex
new file mode 100644
index 0000000..3cc37fc
--- /dev/null
+++ b/section_education.tex
@@ -0,0 +1,6 @@
+\subtitle{Education}{\faSuitcase}
+
+\begin{jobs}
+ \titledevent{July 2006} {PhD}{degree in Computer Engineering “Data Exchange Solution for Distributed Data Acquisition Systems and its application for Cosmic Ray Monitor Networks” at National Academy of Science, Armenia}
+ \titledevent{\ivl{1996}{2001}} {MSc}{in Mathematics “Data Processing using Neural Networks” at Moscow State University}
+\end{jobs}
diff --git a/section_employment.tex b/section_employment.tex
new file mode 100644
index 0000000..8001fc3
--- /dev/null
+++ b/section_employment.tex
@@ -0,0 +1,11 @@
+\subtitle{Employment history}{\faSuitcase}
+%\renewcommand{\labelitemi}{$\bullet$}
+
+\begin{jobs}
+ \jobevent {\since{2020}} {Leader of CloudDAQ Project}{Karlsruhe Institute of Technology}{Research on cloud technologies for control and data acquisition applications}
+ \jobevent {\ivl{2013}{2020}} {Data Processing and Performance Expert}{Karlsruhe Institute of Technology}{High-performance instrumentation for large-scale scientific experiments}
+ \jobevent {\ivl{2007}{2012}} {Postdoctoral Researcher}{KIT}{Data management \& software optimization}
+ \jobevent {\ivl{2005}{2007}} {Researcher}{Yerevan Physics Institute}{DAQ for particle detector networks}
+ \jobevent {\ivl{2002}{2005}} {Associate Researcher}{Forschungszentrum Karlsruhe}{}
+ \jobevent {\ivl{2001}{2002}} {Software Engineer}{Yerevan Physics Institute}{}
+\end{jobs}
diff --git a/section_experiments.tex b/section_experiments.tex
new file mode 100644
index 0000000..c709da6
--- /dev/null
+++ b/section_experiments.tex
@@ -0,0 +1,30 @@
+\subtitle{Experiments and collaborations}{\faTasks}
+% Conceptually:
+% * Experiment - ends of its own, Facility - to run other experiments, Collaboration - to build facilities.
+% Skipped:
+% - Since 2016 SmartGrid
+% - 2017 – 2020 ROOF (DFG-funded): Dynamical tracking of structures in multi-phase fluids by ultra-fast X-ray tomography and image-based scanning
+
+\begin{events}
+ \eventsection{Current}{}
+ \experiment {\since{2020}} {PANDA} {anti-Proton ANnihilations at Darmstadt} {https://panda.gsi.de}{Member}
+ \facility {\since{2013}} {BESS} {KIT Battery Technology Center} {http://www.batterietechnikum.kit.edu}{}
+ \facility {\since{2008}} {KARA} {Karlsruhe Research Accelerator} {https://www.ibpt.kit.edu/kara.php}{}
+ \experiment {\since{2007}} {KATRIN} {Karlsruhe Tritium Neutrino Experiment} {http://www.katrin.kit.edu}{Member}
+ \experiment {\since{2006}} {SEVAN} {Space Environment Viewing and Analysis Network} {http://crd.yerphi.am/space_environmental_viewing_and_analysis_network}{Member}
+ \experiment {\since{2001}} {ASEC} {Aragats Space Environmental Center} {http://crd.yerphi.am/ASEC_Monitors}{Member}
+
+ \eventsection{Past}{events}
+ \collaboration{2020} {CCPi Network} {Collaborative Computational Project for Imaging} {https://www.ccpi.ac.uk}{}
+ \facility {\ivl{2014}{2018}} {HZG} {Helmholtz-Zentrum Geesthacht} {https://www.hzg.de/institutes_platforms/materials_research/physical_metallurgy/x_ray_imaging/index.php.en}{}
+ \collaboration{\ivl{2010}{2018}} {TPU} {Tomsk Polytechnic University} {https://tpu.ru}{}
+ \collaboration{\ivl{2016}{2017}} {CMS} {Compact Muon Solenoid} {https://cms.cern}{}
+ \collaboration{\ivl{2016}{2017}} {UFO} {German-Russian Collaboration on Ultrafast Tomography} {https://ufo.kit.edu}{}
+ \collaboration{\ivl{2010}{2017}} {SCI} {Shubnikov Crystallography Institute} {https://www.crys.ras.ru}{}
+ \experiment {\ivl{2009}{2015}} {KIT Cube} {Integrated atmospheric observation system} {http://www.kitcube.kit.edu}{}
+ \facility {\ivl{2009}{2015}} {KIT Tower} {Meteorological tower at KIT North Campus} {https://www.imk-tro.kit.edu/english/7778.php}{}
+ \facility {\ivl{2008}{2014}} {TOSKA} {Test facility for fusion magnets at KIT} {}{}
+ \facility {\ivl{2008}{2014}} {ESRF} {European Synchrotron Radiation Facility} {http://esrf.eu/}{} % Collaborated on high-speed tomography with GPU
+\end{events}
+
+
diff --git a/section_funding.tex b/section_funding.tex
new file mode 100644
index 0000000..f250ce8
--- /dev/null
+++ b/section_funding.tex
@@ -0,0 +1,33 @@
+\subtitle{Funding}{\faTasks}
+% skipped:
+% 2016 DFG ROOF (2017-2020)
+% unfunded projects.
+% 2018 ? KURDAT? SuperNOVA?
+% 2018 ? IMS (with Busman)
+% xxxx DFG uPIV
+% 2014 H2020 PANDAS? (was pretty-much representing KIT)
+% ???? PNI-HDRI?
+% Decided to skip
+% \funding {2021} {Helmholtz} {\ivl{2021}{2023}} {Submitted}{a proposal to Helmholtz-OCPC Program}{to initiate Sino-German cooperation on leveraging HPC for data acquisition systems}
+% \funding {2015} {COST (travel)} {2015} {Applied for}{COST travel grant for a Master student}{to transfer a fast reconstruction technology to \reffac{ESRF}}
+% \funding {2014} {H2020} {} {Represented KIT in}{a consortium preparing \emph{unfunded} PaN-DAAS proposal for H2020 funding}{(data analysis services for photon and neutron facilities)}
+
+\begin{complexevents}
+ \funding {2021} {\refexp{KATRIN} (100 k€)} {KaaS (2021)} {}
+ {Author}{investments for upgrade of \refsoft{KaaS} cluser}{}
+ \funding {2020} {KCETA (6 k€)} {RoCE (2020)} {}
+ {Contributing author}{investments to integrate ROCe protocol in IPE DAQ}{}
+ \funding {2019} {Helmholtz} {MT-DTS (\ivl{2021}{2027})} {}
+ {Technical contribution}{\refproj{MT-DTS ST2} subtopic in \refproj{Helmholtz Matter and Technologie} research program}{}
+ \funding {2013, 2016} {BMBF (750 k€)} {ASTOR (\ivl{2013}{2016}), NOVA (\ivl{2016}{2020})} {ASTOR,NOVA}
+ {Technical contribution}{2 projects on collaborative anlaysis of tomographic datasets in the cloud}{}
+ \funding {2012} {BMBF (15 k€)} {ADEI (\ivl{2013}{2015})} {ADEI}
+ {Contributing author}{BMBF networking grant for cooperation with \refexp{ASEC}}{on data analysis platform}
+ \funding {2011} {Diaspora (100 k\$)} {VMAV (\ivl{2012}{2014})} {VMAW}
+ {Contributing author}{Vaporciyan Multivariate Analysis and Visualization (non-governamental grant by Armenian diaspora)}{for establishing multivariate analysis platform at \refexp{ASEC}}
+ \funding {2010, 2011} {BMBF (2.5 m€)} {UFO-1 (\ivl{2010}{2013}), UFO-2 (\ivl{2012}{2015})} {UFO}
+ {Contributing author}{Ultra Fast X-ray Imaging of Scientific Processes with On-line Assessment and Data-driven Process Control}{I have contributed vision of online data processing system and provided definitions of the corresponding work-package}
+ \funding {2009} {Helmholtz} {HDRI (\ivl{2010}{2014})} {}
+ {Technical contribution}{HDRI (High data rate processing and analysis) initiative in PNI (Photons, Neutrons, Ions) research program}{}
+\end{complexevents}
+
diff --git a/section_leadership.tex b/section_leadership.tex
new file mode 100644
index 0000000..29c9c40
--- /dev/null
+++ b/section_leadership.tex
@@ -0,0 +1,16 @@
+\subtitle{Leadership}{\faTasks}
+
+
+\begin{complexevents}
+% Currently, total numbers in project. Range or maximum extent are possibly more correct
+% Skipped:
+% ROOF
+% PhD hunting? Outsourcing with Jalal?
+
+ \leadership{\since{2020}} {Leading efforts to}{prepare \refexp{KATRIN} data infrastructure for Tristan detector} {Group}{2 PhD, 2 students}
+ \leadership{\ivl{2018}{2020}} {Led}{development of \refexp{KATRIN} cloud platform and migration of services} {Group}{2 Postdocs, PhD, 2 students} % organization: Marco,Jan,Jonas,NTJ,etc.
+ \leadership{\ivl{2013}{2018}} {Led}{volume visualization task force in \refproj{ASTOR} and \refproj{NOVA} projects} {Group}{PhD, 5 students}
+ \leadership{\ivl{2010}{2018}} {Coordinated}{a program on stewardship of thesisis for \refuni{TPU} students} {Participation}{3 PhD, 12 students}
+ \leadership{\ivl{2010}{2016}} {Led}{a collaboration with \refexp{ASEC} on online data analysis platform} {Group}{Postdoc and PhD in \refuni{KIT}, Postdoc and 2 engineers at \refexp{ASEC}, 10 students}
+ \leadership{\ivl{2010}{2017}} {Coordinated}{work-package on tomographic software in \refproj{UFO} project} {Group}{3 PhD in \refuni{KIT}, 3 PhD in partner universities, 5 students}
+\end{complexevents}
diff --git a/section_presentations.tex b/section_presentations.tex
new file mode 100644
index 0000000..ca50995
--- /dev/null
+++ b/section_presentations.tex
@@ -0,0 +1,61 @@
+\subtitle{Selected presentations}{\faSuitcase}
+
+\begin{events}
+% Parallel sessions is standard, everything else should be noted (don't specify "plenary" if there is no parallel sessions)
+% Skip: local workshops like visions and collaboration meetings
+% ESRF: visit in 2019 (no seminar), EXTREMA Cost workshop (no talk)
+% Visions 2009 - 2020 (except 2017)
+% Collaboration meetings, ROOF/2018, ASTOR/2014 (Desy), PANDAS/2014
+% Local: RoCE/2020, KaaS/2020, Alps/2012 (local meeting on Flute)
+% Presentation for guests: Nicolas(Soleil) visits (multiple)
+% Unclear: 2011/UFO (internal), 2012/Graphics (internal?)
+
+
+ \eventsection{Conferences}{}
+ \conference{\at{Oct}{2019}} {invited} {Accelerating Remote Visualization of Large Tomographic Data Volumes} {Global Innovation Forum, Armenia}{}
+ \conference{\at{Oct}{2018}} {} {Balancing load of GPU subsystems to accelerate image reconstruction in parallel beam tomography} {SBAC-PAD 2018 conference, Lyon, France}{}
+ \conference{\at{Okt}{2014}} {} {Computing Infrastructure for Online Monitoring and Control of High-throughput DAQ Electronics} {10th PCAPAC conference, Karlsruhe, Germany}{}
+ \conference{\at{Sep}{2014}} {invited} {UFO – Status and Perspectives of Ultrafast X-Ray Imaging at ANKA" and "Fast Reconstruction Algorithms for Computed Tomography} {SNI2014, Bonn, Germany} {Delivered by M. Balzer}
+% \conference{\at{Sep}{2014}} {invited} {Fast Reconstruction Algorithms for Computed Tomography} {SNI2014, Bonn, Germany} {Delivered by M. Balzer}
+ \conference{\at{Jun}{2012}} {} {A High Throughput Platform for Real-Time X-ray Imaging" and "Advanced Linux PCI Services} {18th IEEE Real-Time Conference, Berkeley, CA, USA}{}
+% \conference{\at{Jun}{2012}} {poster} {Advanced Linux PCI Services} {18th IEEE Real-Time Conference, Berkeley, CA, USA}{}
+ \conference{\at{May}{2012}} {} {A High Performance Platform for Real-Time X-ray Imaging} {GPU Technology Conference, San Jose, CA, USA}{}
+% \conference{\at{Nov}{2011}} {poster} {A GPU-based Architecture for Real-Time Data Assessment at Synchrotron Experiments} {SC11 Supercomputing Conference, Seattle, WA, USA}{}
+% \conference{\at{Oct}{2010}} {poster} {ADEI – Web 2.0 Data Manager for the KATRIN Neutrino Experiment} {CHEP 2010 Conference, Taipei, Taiwan}{}
+% \conference{\at{Sep}{2010}} {poster} {A GPU-based Architecture for Real-Time Data Assessment at Synchrotron Experiments} {GPU Technology Conference, San Jose, CA, USA} {canceled because of visa}
+% \conference{\at{Sep}{2010}} {poster} {GPU Computing for Real-Time Optical Measurement Techniques} {GPU Technology Conference, San Jose, CA, USA} {canceled because of visa}
+ \conference{\at{May}{2010}} {} {A GPU-based Architecture for Real-Time Data Assessment at Synchrotron Experiments} {17th IEEE Real-Time Conference, Lisbon, Portugal}{}
+% \conference{\at{May}{2009}} {poster} {A Novel Approach for Online Monitoring for High Data-Rate Image-Based Instrumentation} {16th IEEE Real-Time Conference, Beijing, China} {presented by ???}
+ \conference{\at{Apr}{2009}} {} {Comparison of fast multi-platform XML Libraries: Results for January 2009} {BenchmarX'09 workshop at DASFAA 2009, Brisbane, Australia}{}
+% \conference{\at{Mar}{2009}} {poster} {Advanced Data Extraction Infrastructure: Web Based System for Treatment of Time Series} {CHEP 2009, Prague, Czech}{}
+% \conference{\at{Mar}{2007}} {poster} {The Aragats Data Acquisition System for Highly Distributed Particle Detecting Networks} {CHEP 2007, Victoria, BC, Canada}{}
+ \conference{\at{Sep}{2007}} {} {Advanced Data Acquisition System for SEVAN} {SEE2007 Symposium, Athens, Greece}{}
+
+ \eventsection{Workshops}{events}
+% \workshop{\at{Mar}{2019}} {} {UFO Cloud: Data-Acquisition-as-a-Service} {Matter and Technology program meeting, Germany}{}
+ \workshop{\at{Nov}{2018}} {} {High-Speed Tomography: Fine-tuning back projection for GPU architectures} {CAMERA workshop, Berkeley, CA, USA}{}
+ \workshop{\at{Nov}{2017}} {invited} {UFO - A platform for high data rate instrumentation with GPUs} {EUCALL GPU/FPGA Workshop at XFEL, Desy, Hamburg}{}
+ \workshop{\at{May}{2017}} {invited} {SHAPe: Scalable and Highly Available Platform for Scientific Data Portals} {ARBRA Workshop, Nor-Amberd, Armenia}{}
+ \workshop{\at{Apr}{2017}} {invited} {Tuning tomographic reconstruction for different parallel architectures} {workshop on Real-Time 3D Tomography, CWI, Amsterdam}{}
+% \workshop{\at{Mar}{2016}} {} {Efficient GPU-enabled computing infrastructure for rapid prototyping high-speed scientific detectors} {Matter and Technology program meeting, Germany}{}
+ \workshop{\at{Jan}{2016}} {invited} {Performance-oriented instrumentation for high-speed synchrotron imaging} {workshop on Large Scale Tomography, Szeged, Hungary}{}
+% \workshop{\at{Mar}{2013}} {} {High-performance computing hardware for high data rates} {HDRI program meeting, Germany}{}
+% \workshop{\at{Oct}{2013}} {notalk} {} {EXTREMA workshop on Advanced X-Ray Tomography, ESRF, Grenoble, France}{}
+ \workshop{\at{Apr}{2012}} {invited} {ADEI for Tango} {Tango workshop, MAX-IV, Lund, Sweden}{}
+ \workshop{\at{Mar}{2012}} {} {Practical Experience with GPUs for high throughput computing} {HDRI/PanData workshop}{}%, Desy, Hamburg, Germany}{}
+ \workshop{\at{Mar}{2011}} {invited} {High Speed Tomography at KIT} {meeting on Tomographic reconstruction software, ESRF}{}%, Grenoble, France}{}
+ \workshop{\at{Sep}{2008}} {} {Advanced Data Extraction Infrastructure} {FORGES 2008 workshop, Nor-Amberd, Armenia}{}
+
+ \eventsection{Seminars}{events}
+% \seminar{\at{Nov}{2020}} {} {Cloud Technologies for Control Applications} {Insitute for Beam Physics and Technology, KIT, Germany}{}
+ \seminar{\at{May}{2020}} {} {Real-time reconstruction for synchrotron tomography} {CT lunch-and-learn session at University of Manchester, UK}{}
+% \seminar{\at{Feb}{2019}} {} {WAVe: Accelerating Remote Visualization of Large Volumes} {YerPhI seminar, Armenia}{}
+ \seminar{\at{Feb}{2019}} {} {Cloud platform for high data rate detector instrumentation} {ASEC seminar, Armenia}{}
+ \seminar{\at{Oct}{2018}} {} {Balancing load of GPU subsystems to accelerate back projection for synchrotron tomography} {ESRF seminar, Grenoble, France}{}
+ \seminar{\at{Apr}{2016}} {} {ADEI: Intelligent visualization and management of time-series data in scientific experiments} {Instituto de Física, UNAM, Mexico}{}
+ \seminar{\at{May}{2015}} {} {Advanced Algorithms for Tomography} {YerPhI seminar, Yerevan, Armenia}{}
+% \seminar{\at{Dez}{2013}} {} {ADEI: Advanced Data Extraction Infrastructure} {Steinbuch Centre for Computing, KIT, Germany}{}
+ \seminar{\at{Sep}{2013}} {} {Ultrafast X-Ray Imaging of Scientific Processe} {Shubnikov Crystallography Institute, Russia}{}
+ \seminar{\at{May}{2013}} {} {Ultrafast X-Ray Imaging of Scientific Processes} {Tomsk Polytechnic University, Russia}{}
+% \seminar{\at{May}{2011}} {} {High Speed Tomography} {Institute for Synchrotron Radiation, KIT, Germany}{}
+\end{events}
diff --git a/section_research.tex b/section_research.tex
new file mode 100644
index 0000000..359a1d6
--- /dev/null
+++ b/section_research.tex
@@ -0,0 +1,61 @@
+%\subtitle{Research and Technology}{\faSuitcase}
+\subtitle{Research and development}{\faSuitcase}
+
+While the focus of my research is computing technolgies, the developed instrumentation enabled major scientific break-troughs achieved by KATRIN~\cite{katrin2019limit} and ASEC~\cite{chili2010thunderstorm} collaborations.
+Bellow are referenced selected peer-reviewed publications which are either edited by me and my students or where we made a significant contribution.
+
+\begin{verycomplexevents}
+% We don't list experiments which are handled torugh the software (with exceptions dedicated applications?), only direct impact.
+% Skipped:
+% buzmakov - just mentions UFO camera. overall not a high ranked paper.
+% \subsectiontitle{Technology for the future data acquisition systems}
+
+% ?? make subsections with dates: \eventsection
+
+ \datedeventsection{\since{2011}}{High-bandwidth data acquisition and data-driven control}{}
+% \research {starting} {} {} {Adoption of}{high-performance and cloud computing for online data processing}
+ \research {\ivl{2018}{2019}} {PyHST} {} {Fine tunning}{tomographic reconstruction to evolving GPU architectures trough performance modelings~\cite{csa2020rtip}}
+ \research {\ivl{2016}{2017}} {} {CMS} {Participated}{in a case study on applications of GPUs in L1 track trigger for the next upgrade of CMS experiment~\cite{mohr2017cms}}
+ \technology {\ivl{2016}{2017}} {UFO} {KARA} {Designed}{a full chain of instrumentation for high-speed synchrotron imaging with online reconstruction and image-based feedback loop~\cite{kopmann2017ufo,stevanovic2015concert}}
+ \research {\ivl{2015}{2016}} {Alps} {KARA} {Researched}{low-latency communication mechanisms for data-driven control applications~\cite{vogelgesang2016dgma}} %dritschler2014using
+ \technology {\ivl{2014}{2015}} {Alps} {KARA} {Implemented}{fast DMA drivers with GPUDirect/DirectGMA support~\cite{rota2015dma}}
+ \research {\ivl{2013}{2014}} {UFO,PyHST} {KARA,ESRF} {Reviewed}{assymptotically fast methods of tomographic reconstruition suitable for GPU architectures~\cite{rshkarin2015}}
+ \research {\ivl{2011}{2013}} {UFO} {KARA} {Researched}{pipelined architectures for online processing of image-streams~\cite{vogelgesang2012ufo}}
+ \technology {\ivl{2011}{2013}} {Alps} {KARA} {Developed}{streaming data acquisition platform for scientific cameras (readout,debugging,storage)~\cite{caselle2013camera}}% readout framework, camera drivers, absraction, streaming storage, scripting & debugging
+
+ \datedeventsection{\since{2007}}{Parallel architectures, performance analysis, and software optimization}{verycomplexevents}
+ \technology {\ivl{2020}{2021}} {CCPi} {UoM} {Applied}{methods of approximate computing to enable reconstruction of large datasets~\cite{ametova2021neutron}}
+ \research {\ivl{2017}{2018}} {PyHST} {} {Researched}{performance inbalances and hidden parallelism in GPU architectures~\cite{csa2018sbac}} % Balancing part is new, everything else was done earlier...
+ \technology {\ivl{2014}{2017}} {UFO} {KARA} {Investigated}{viable compromises between quality and parallelization capabilites of tomographic algorithms~\cite{ashkarin2015}}
+ \technology {\ivl{2013}{2014}} {UFO} {} {Developed}{parallel algorithms for uPIV (micro-particle velocimetry)~\cite{cavadini2018upiv}}
+ \technology {2010} {MRSES} {ASEC} {Leveraged}{PoweXCell architecture for MRSES feature selection algorithm [5000x speed-up]}
+ \technology {\ivl{2009}{2010}} {PyHST} {KARA,ESRF} {Optimized}{PyHST tomographic reconstruction framework~\cite{csa2011pyhst}}
+ \technology {\ivl{2009}{2010}} {DictHW} {} {Developed}{GPU implementation of digital image correlation and tracking algorithm [10x speed-up]}
+ \technology {\ivl{2007}{2008}} {XMLBench} {} {Carried out}{a performance study of open-source XML frameworks~\cite{csa2009xmlbench}}
+
+ \datedeventsection{\since{1999}}{Digitization, data organization, and distributed control systems}{verycomplexevents}
+ \research {\since{2019}} {KaaS} {KATRIN} {Research}{cloud technologies for highly heterogeneous control systems in large-scale scientific experiments [expected]} % KATRIN paper to be added, ADEI-cloudificatin separated as stand-alone point
+ \research {\ivl{2015}{2017}} {WAVe} {KARA} {Researched}{remote visualization techniques for large and time-resolved tomographic volumes~\cite{ntj2017wave,losel2020biomedisa}} % Compression could be continuation of this (19/20)
+ \research {\ivl{2013}{2015}} {ADEI} {ASEC} {Researched}{emerging web technologies for management and visualization of terabyte-scale archives with time-series} % This is about ADEI2 attempts (but no publication)
+ \technology {\ivl{2011}{2014}} {ADEI} {ASEC} {Converted}{KATRIN data management system into a full flagged platform for time-series exploration and analysis} % ADEI analysis, etc.
+ \technology {\ivl{2008}{2010}} {ADEI} {KATRIN} {Developed}{data management components of KATRIN slow control system~\cite{csa2010adei}} % Lets assume it includes ADEI/Control
+ \technology {\ivl{2007}{2008}} {} {KATRIN} {Stabilized}{KATRIN slow control system for production use~\cite{katrin2015detector}}
+ \technology {\ivl{2005}{2006}} {ADAS} {ASEC} {Developed}{a distributed data acquisition system for particle detector networks~\cite{csa2009sevan}}
+ \research {\ivl{2002}{2004}} {ADAS} {ASEC,KATRIN} {Researched}{fast network protocols for heterogeneous slow control systems~\cite{eppler2004opc}}
+ \technology {\ivl{1999}{2001}} {} {} {Evaluated}{hardware-accelerated neural-networks for trigger applications~\cite{vardanyan2001sand}}
+\end{verycomplexevents}
+
+% \research {\since{2020}} {Group - Application }
+% \research {\ivl{2016}{2017}} {Group - Supervised a case study on use of GPUs in L1 track trigger for the next upgrade of CMS experiment~\cite{mohr2017cms}.}
+% \technology {\ivl{2011}{2016}} {Participated in the development of streaming data acquisition platform aimed at control systems with image-based feedback loops and was responsible for the software part~\cite{caselle2013camera,rota2015dma}.}
+% \technology {\ivl{2007}{2009}} {Developed data management components of KATRIN slow control system~\cite{katrin2015detector}.}
+% \technology {\ivl{2005}{2007}} {Developed distributed DAQ system for particle detector networks~
+%\cite{csa2009sevan}.}
+% \technology {\ivl{2002}{2005}} {Designed a high-performance extension for OPC XML-DA protocol aimed on slow control systems with high sampling rates.}
+% \technology {\ivl{2020}{2021}} {Collaborated with scientists from University of Manchester on optimization of their tomography software: suggested methods of approximate computing to enable also reconstruction of large datasets~\cite{ametova2021neutron}.}
+% \research {\ivl{2012}{2019}} {Analyzed major parallel architectures from AMD, NVIDIA, and Intel using micro-benchmarking techniques. Build a performance model of the back-projection algorithm and fine-tuned the parallel implementation for each architecture accordingly. The measured speed-ups over the state-of-the-art parallel solutions range from 2 to 7 times depending on the considered architecture. Mixed precission.}
+% \technology {\ivl{2011}{2019}} {A new control-system for high-speed synchrotron imaging with online reconstruction and image-based feedback loop~\cite{kopmann2017ufo}}
+% \research {\ivl{2013}{2017}} {With a group of 1 PhD and 2 Master students we have investigated iterative reconstruction algorithms to improve reconstruction of noisy or undersampled data. We searched for practical solutions providing viable balance between resulting quality and parallelization capabilities~\cite{ashkarin2015}. The selected algorithms were adapted for the GPU architecture and integrated into the UFO framework.}
+% \research {\ivl{2013}{2015}} {Supervised a Master student researching methods of tomographic reconstruction which are both assymtotically faster than traditionally used \emph{Filtered Back Projection} and suitable for execution on GPU architectures~\cite{rshkarin2015}.}
+% \research {\ivl{2011}{2014}} {With a group of 2 PhD and several Master students we developed a novel architecture for pipelined processing of image-streams which leveraged available parallelism in GPUs (and other massively parallel architectures) and was scaling across multiple GPUs and multi-GPU nodes automatically~\cite{vogelgesang2012ufo}.}
+% \technology {\ivl{2009}{2010}} {Collaborated with researchers from ESRF facility on high-speed tomographic reconstruction and improved performance of PyHST software by factor of 30~\cite{csa2011pyhst}.}
diff --git a/section_responsibilities.tex b/section_responsibilities.tex
new file mode 100644
index 0000000..5469505
--- /dev/null
+++ b/section_responsibilities.tex
@@ -0,0 +1,31 @@
+\subtitle{Responsibilities}{\faTasks}
+\begin{events}
+% Skipped:
+% - Panda ROCe/RDMA
+% - Tango RDMA? But I was not really involved in this part...
+% - Tango Archives at ANKA (not helpful and will be mentioned in the research/technology)...
+% - SmartGrid (since 2016)
+
+% ? Mirroring ADEI data in EU/US?
+
+% \subsectiontitle{Current responsibilites}
+ \eventsection{Current}{}
+ \responsibility{\since{2018}} {Responsible for}{data management cloud at \refexp{KATRIN}}
+% \responsibility{\since{2018}} {Responsible for}{virtualization services at \refuni{IPE}}
+ \responsibility{\since{2013}} {Responsible for}{data management system for \reffac{KIT Batery Technology Center}}
+ \responsibility{\since{2011}} {Responsible for}{software stack of \refproj{UFO} data acquisition platform}% including UFO Camera and KAPTURE/KALYPSO detectors}
+ \responsibility{\since{2007}} {Responsible for}{slow control system at \refexp{KATRIN}}
+
+% \subsectiontitle{Prior responsibilites: Digitization, data organization, and distributed control systems}
+ \eventsection{Past}{events}
+ \responsibility{\ivl{2017}{2018}} {Responsible for}{transfer of \refproj{UFO} Camera technology to \reffac{HZG}} % for operation at \reffac{IBL} and \reffac{HEMS} beamlines at \reffac{PETRA-3} synchrotron}
+ \responsibility{\ivl{2010}{2017}} {Responsible for}{parallel computing cluster for \refproj{UFO} project}
+ \responsibility{\ivl{2013}{2016}} {Responsible for}{technology transfer to \refexp{ASEC} and \refexp{SEVAN} experiments}
+ \responsibility{\ivl{2009}{2015}} {Responsible for}{data portal for \refexp{KIT Cube} experiment and \reffac{KIT Weather Tower}}
+ \responsibility{\ivl{2008}{2014}} {Responsible for}{maintenace and optimization of a \reffac{KARA} branch of \refsoft{PyHST}}
+ \responsibility{\ivl{2008}{2014}} {Responsible for}{data management system at \reffac{TOSKA} and \reffac{CULTKA} facilities}
+ \responsibility{\ivl{2007}{2009}} {Responsible for}{integration of \refexp{KATRIN} components in centralized control system}
+ \responsibility{\ivl{2005}{2007}} {Responsible for}{data acquisition and data management at \refexp{ASEC} and \refexp{SEVAN}}
+ \responsibility{\ivl{2003}{2005}} {Responsible for}{intercommunication between \refexp{KATRIN} DAQ and NI fieldpoint devices}
+ \responsibility{\ivl{2001}{2002}} {Responsible for}{IT infrastructure of \refexp{ASEC}}
+\end{events}
diff --git a/section_skills.tex b/section_skills.tex
new file mode 100644
index 0000000..064a5f1
--- /dev/null
+++ b/section_skills.tex
@@ -0,0 +1,11 @@
+\subtitle{Technical skills}{\faTasks}
+
+\begin{categories}
+ \category{Programming}{C/C++, IPC, TCP/IP, CUDA/OpenCL, SSE/AltiVec, OpenMP/NPTL}
+ \category{System Programming}{POSIX, Linux Internals, PCI Drivers, DMA, GPUDirect/DirectGMA}
+ \category{Networking}{Ethernet/Infiniband, Sockets/MPI/0MQ, RDMA (ROCe), LibVMA}
+ \category{Software Analysis}{gdb, perf/operf, nvvp/nvprof, vtune, valgrind, systap, tcpdump}
+ \category{Scientific Computing}{MATLAB, Python/SciPy, ROOT, BLAS/LAPACK}
+ \category{Data Management}{Brokers, Databases (SQL/NOSQL), XML \& Co, Web Development}
+ \category{Orchestration}{Ansible, OpenShift, Docker, LibVirt/KVM, Infiniband, GlusterFS}
+\end{categories}
diff --git a/section_software.tex b/section_software.tex
new file mode 100644
index 0000000..d5617da
--- /dev/null
+++ b/section_software.tex
@@ -0,0 +1,39 @@
+\subtitle{Scientific and open-source software}{\faSuitcase}
+%\renewcommand{\labelitemi}{$\bullet$}
+
+\begin{complexevents}
+ \eventsection{Maintain}{} %{Projects I currently maintain}{}
+ \software {\since{2018}} {KaaS} {ands.suren.me} {KATRIN} % batteries
+ {Developed a}{Katrin-as-a-Service data management platform for KATRIN}{}
+ \software {\since{2015}} {Bora} {bora.suren.me} {KATRIN}
+ {Supervised and currently maintain a}{monitoring framework for ADEI ecosystem}{}
+ \software {\since{2011}} {Alps} {alps.suren.me} {Camera at HZG, Camera at SCI, Kapture/Kalypso at KARA}
+ {Developed a}{Linux driver platform for fast prototyping of PCIe-based electronics}{} %{with flexible register model with scripting support, modular scatter-gather DMA engines, and low-latency RDMA communication with GPUs}
+ \software {\since{2008}} {ADEI} {adei.info} {KATRIN, KARA, ASEC, BESS, KIT Tower, KIT Cube, TOSKA}
+ {Developed a}{cloud platform for visualization and analysis of time-series}{}
+ \software {\since{2005}} {ADAS} {adas.suren.me} {ASEC}
+ {Developed a}{data acquistion system for ASEC detectors}{}
+ \software {\since{2003}} {RusXMMS} {rusxmms.sf.net} {RedHat, OpenSuSE, Debian, Ubuntu, Arch, FreeBSD}
+ {Developed a}{operations with multilangual strings in non-unicode encodings}{} %{collection of language and encoding detection libraries to simplify operations with collections of multilingual strings encoded in old non-Unicode formats (e.g. file names, metadata in music files, etc.)}{}
+
+ \eventsection{Supervised and coordinated}{complexevents} %{Projects I have supervised and coordinated}{complexevents}
+ \software {\ivl{2015}{2018}} {WAVe} {wave.suren.me} {}
+ {Supervised development of a}{JavaScript volume rendering library based on WebGL}{supervised}
+ \software {\ivl{2012}{2017}} {UFO} {ufo-kit.github.io} {KARA}
+ {Coordinated development of a}{pipelined image-processing framework and a collection of GPU-accelerated algorithms}{coordinated}
+
+ \eventsection{Contributions}{complexevents}
+ \software {\ivl{2020}{2021}} {CCPi} {www.ccpi.ac.uk} {}
+ {Contributed performance optimizations for regularization toolkit in}{Tomographic Imaging Project}{performance optimizations}%{for regularization toolkit}
+ \software {\ivl{2008}{2014}} {PyHST} {pyhst2.suren.me} {KARA, ESRF}
+ {Optimized}{\reffac{ESRF} tomography software}{DFI algorithm and performance improvements}
+
+ \eventsection{Obsolete}{complexevents}
+ \obsolete {\ivl{2010}{2011}} {MRSES} {mrses.suren.me} {}
+ {Implemented a}{feature selection algorithm for Intel and PowerXCell architetures}{}
+ \obsolete {\ivl{2009}{2010}} {DictHW} {dicthw.suren.me} {}
+ {Developed}{CUDA implementation of digital image tracking algorithm}{}
+ \obsolete {\ivl{2003}{2009}} {XMLBench} {xmlbench.sourceforge.net} {}
+ {Developed}{XML Benchmarking suite}{}
+
+\end{complexevents}
diff --git a/section_supervision.tex b/section_supervision.tex
new file mode 100644
index 0000000..32b01da
--- /dev/null
+++ b/section_supervision.tex
@@ -0,0 +1,20 @@
+\subtitle{Supervision and teaching}{\faTasks}
+\begin{events}
+ \eventsection{PhD}{}
+ \supervision {\since{2020}} {Proposed and supervise}{2 PhD projects on adoption of cloud technologies for data acquisition and slow control systems}
+ \supervision {\ivl{2014}{2018}} {Co-supervised}{PhD thesis “Big Data Management and Visualisation”}
+ \supervision {\ivl{2013}{2017}} {Co-supervised}{PhD student working on low-latency communication protocols for distributed data acquisition systems}
+ \supervision {\ivl{2011}{2016}} {Co-supervised}{PhD thesis “An Extensible Parallel Computing Framework for Ultra-Fast X-Ray Imaging”}
+
+ \eventsection{Students}{events}
+ \supervision {\ivl{2014}{2018}} {Supervised}{5 master theses on remote visualization of archives with tomopgraphic data}
+ \supervision {\ivl{2013}{2017}} {Supervised}{4 students working on fast DMA interconnects between FPGA and GPUs}
+ \supervision {\ivl{2011}{2016}} {Supervised}{6 theses on advanced algoritms in tomographic reconstruction}
+ \supervision {\ivl{2010}{2015}} {Supervised}{10 internships on web technologies for visualization of time series}
+ \supervision {2014} {Supervised}{2 master theses on GPU-accelerated algorithms for nano-particle tracking}
+
+ \eventsection{Courses and seminars}{events}
+ \teaching {2019} {}{GPU computing tutorial at ARBRA summer school in Nor-Amberd, Armenia}
+ \teaching {\ivl{2014}{2017}} {Supervised}{4 student topics at seminar "Advanced topics in Parallel Programming"}% (organized by Prof. Achim Streit)}
+ \teaching {2013} {}{GPU computing tutorial at KSETA graduate school at KIT}
+\end{events}
diff --git a/xetex-inputenc.sty b/xetex-inputenc.sty
new file mode 100644
index 0000000..e595283
--- /dev/null
+++ b/xetex-inputenc.sty
@@ -0,0 +1,83 @@
+%%
+%% This is file `xetex-inputenc.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xetex-inputenc.dtx (with options: `package')
+%%
+%% ___________________________________
+%% The xetex-inputenc override package
+%% (C) 2009 Will Robertson
+%% License information appended
+%%
+%%
+\ProvidesPackage{xetex-inputenc}
+ [2009/03/09 v0.2 XeTeX-specific inputenc package]
+\def\xIE@encoding#1#2{%
+ \DeclareOption{#1}{%
+ \xIE@set{#2}
+ }%
+}
+\DeclareOption*{%
+ \PackageWarning{xetex-inputenc}{%
+ Encoding "\CurrentOption" not recognised; attempting to use it anyway
+ }%
+ \xIE@set{\CurrentOption}%
+}
+\newcommand\xIE@set[1]{%
+ \edef\xetex@inputenc{#1}%
+ \AtEndOfPackage{%
+ \XeTeXinputencoding "\xetex@inputenc"
+ \XeTeXdefaultencoding "\xetex@inputenc"
+ }
+}
+\xIE@encoding{ascii} {ascii}
+\xIE@encoding{latin1} {latin1}
+\xIE@encoding{latin2} {latin2}
+\xIE@encoding{latin3} {latin3}
+\xIE@encoding{latin4} {latin4}
+\xIE@encoding{latin5} {latin5}
+\xIE@encoding{latin9} {latin9}
+\xIE@encoding{latin10} {latin10}
+\xIE@encoding{decmulti} {dec}
+\xIE@encoding{cp850} {cp850}
+\xIE@encoding{cp852} {cp852}
+\xIE@encoding{cp858} {cp858}
+\xIE@encoding{cp437} {cp437}
+\xIE@encoding{cp865} {cp865}
+\xIE@encoding{applemac} {mac}
+\xIE@encoding{cp1250} {windows-1250}
+\xIE@encoding{cp1252} {windows-1252}
+\xIE@encoding{cp1257} {windows-1257}
+\xIE@encoding{ansinew} {windows-1252}
+\xIE@encoding{utf8} {utf8}
+\ExecuteOptions{utf8}
+\ProcessOptions
+\def\@input#1{%
+ \IfFileExists{#1}{%
+ \XeTeXdefaultencoding "utf8"
+ \@@input\@filef@und
+ \XeTeXdefaultencoding "\xetex@inputenc"
+ }{\typeout{No file #1.}}%
+}
+\AtBeginDocument{%
+ \immediate\write\@auxout{\string\XeTeXinputencoding "utf8"}%
+}
+%%
+%% Copyright (C) 2009 by Will Robertson <wspr81@gmail.com>
+%%
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status)
+%% by Will Robertson.
+%%
+%% This work consists of the file xetex-inputenc.dtx
+%% and the derived files xetex-inputenc.sty,
+%% xetex-inputenc.ins, and
+%% xetex-inputenc.pdf.
+%%
+%%
+%% End of file `xetex-inputenc.sty'.
diff --git a/yaac-another-awesome-cv.cls b/yaac-another-awesome-cv.cls
index a711e4d..bcc4aa8 100755..120000
--- a/yaac-another-awesome-cv.cls
+++ b/yaac-another-awesome-cv.cls
@@ -1,541 +1 @@
-%% Copyright 2016 Christophe Roger
-%
-% Author:
-% Christophe Roger (Darwiin)
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is M. C. Roger.
-%
-% This work consists of the files awesome-source-cv.cls
-
-\ProvidesClass{yaac-another-awesome-cv}[2020/03/24 v2.2.1 'YAAC: Another Awesome CV' Class]
-
-\def\@@ptsize{10pt}
-
-\DeclareOption{10pt}{\def\@@ptsize{10pt}}
-\DeclareOption{11pt}{\def\@@ptsize{11pt}}
-\DeclareOption{12pt}{\def\@@ptsize{12pt}}
-
-\ProcessOptions\relax
-
-\LoadClass[a4paper,\@@ptsize]{article}
-
-\newif\if@showLinks \@showLinksfalse
-\newif\if@isCompact \@isCompactfalse
-
-\DeclareOption{green}{
- \def\@green{green}
-}
-
-\DeclareOption{red}{
- \def\@red{red}
-}
-
-\DeclareOption{indigo}{
- \def\@indigo{indigo}
-}
-\DeclareOption{orange}{
- \def\@orange{orange}
-}
-
-\DeclareOption{monochrome}{
- \def\@monochrome{monochrome}
-}
-
-\DeclareOption{localFont}{
- \def\@local{local}
-}
-
-\DeclareOption{alternative}{
- \def\@alternative{alternate}
-}
-
-\DeclareOption{showLinks}{ \@showLinkstrue}
-\DeclareOption{compact}{ \@isCompacttrue}
-
-\ProcessOptions
-
-% Dependences
-%A Few Useful Packages
-\RequirePackage[english,french]{babel}
-\RequirePackage[utf8]{luainputenc}
-\RequirePackage{fontspec} % for loading fonts
-\RequirePackage{url,parskip} % other packages for formatting
-\RequirePackage[usenames,dvipsnames]{xcolor}
-\RequirePackage{fullpage}
-\RequirePackage[margin=1.5cm]{geometry}
-\RequirePackage[fixed]{fontawesome5}
-\RequirePackage{hyperref}
-\RequirePackage{titlesec}
-\RequirePackage{array}
-\RequirePackage{enumitem}
-\RequirePackage{longtable}
-\RequirePackage{etoolbox}
-\RequirePackage{tikz}
-\RequirePackage[skins]{tcolorbox}
-\RequirePackage{fancyhdr}
-\RequirePackage{ifthen}
-
-
-\DeclareUnicodeCharacter{00E9}{\'{e}}
-% Define default accent colors
-\definecolor{basecolor}{HTML}{000066} %BLUE
-
-\ifundef{\@green} {
- \ifundef{\@red} {
- \ifundef{\@indigo}{
- \ifundef{\@orange} {
- \ifundef{\@monochrome} {}
- { \definecolor{basecolor}{HTML}{000000}}
- }
- { \definecolor{basecolor}{HTML}{e68a00} }
- }
- { \definecolor{basecolor}{rgb}{0.2, 0.07, 0.48} }
- }
- { \definecolor{basecolor}{HTML}{b30000} } %RED
-}
-{ \definecolor{basecolor}{rgb}{0.0, 0.62, 0.38} }
-
-\definecolor{darkGrey}{HTML}{989898}
-
-\colorlet{linkcolor}{basecolor}
-\colorlet{accentcolor}{linkcolor!90}
-\colorlet{symbolcolor}{linkcolor!85}
-
-% Setup hyperref package, and colours for links
-%\definecolor{linkcolour}{rgb}{0,0.2,0.6}
-
-\if@showLinks
- \hypersetup{%
- breaklinks
- }%
-\else
- \hypersetup{%
- pdfborder = {0 0 0},
- breaklinks
- }%
-\fi
-
-% Setup fancyhdr package
-\fancyhf{}
-\fancyhfoffset{0em}
-% Remove head rule
-\renewcommand{\headrulewidth}{0pt}
-%\fancyfoot[C]{\thepage}
-\pagestyle{fancy}
-
-%\pagestyle{empty} % non-numbered pages
-%\font\fb=''[cmr10]'' % for use with \LaTeX command
-
-% Setup CV sections
-\titleformat{\section}{\Large\raggedright}{}{0em}{}[\titlerule]
-\titlespacing{\section}{0pt}{2pt}{2pt}
-
-% Configure list
-\setlist[itemize,1]{label=\faAngleRight, nosep, leftmargin=2em}
-\setlist[itemize,2]{label=\faAngleRight, nosep, leftmargin=1.5em}
-
-% Setup Array : new column type
-\newcolumntype{R}[1]{>{\hfill}m{#1}}
-
-%Italian hyphenation for the word: ''corporations''
-\hyphenation{im-pre-se}
-
-% Setup fonts
-\defaultfontfeatures{Mapping=tex-text}
-%
-
-% Define font to use according to localFont option
-\ifundef{\@local}
-{
- %\setmainfont[BoldFont = Helvetica Neue, ItalicFont=Helvetica Neue Thin Italic ,SmallCapsFont = Helvetica Neue Light]{Helvetica Neue Thin}
- \setmainfont{Source Sans Pro Light}[
- BoldFont = SourceSansPro-Regular,
- ItalicFont= Source Sans Pro Light Italic]
-}
-{
- \setmainfont{SourceSansPro-Light}[
- Path = fonts/,
- BoldFont = SourceSansPro-Regular,
- ItalicFont = SourceSansPro-LightIt]
-}
-
-%New length definition
-\newlength{\fulllength}
-\setlength{\fulllength}{17.8cm}
-
-\newlength{\leftcolumnlength}
-\setlength{\leftcolumnlength}{2.5cm}
-
-\newlength{\rightcolumnlength}
-%\setlength{\rightcolumnlength}{15.3cm minus 1cm}
-%\setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
-\setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
-
-% Override default left column length of (2.5cm)
-% Usage: \setleftcolumnlength{<length>}
-\newcommand{\setleftcolumnlength}[1]{
- \setlength{\leftcolumnlength}{#1}
- \setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
-}
-
-% Font Awesome icons aliases
-\newcommand{\mailSymbol}{\faAt}
-\newcommand{\locationSymbol}{\faMapMarker*}
-\newcommand{\infoSymbol}{\faInfo}
-\newcommand{\linkedinSymbol}{\faLinkedinIn}
-\newcommand{\viadeoSymbol}{\faViadeo}
-\newcommand{\mobileSymbol}{\faMobile*}
-\newcommand{\githubSymbol}{\faGithub}
-\newcommand{\stackoverflowSymbol}{\faStackOverflow}
-\newcommand{\stackexchangeSymbol}{\faStackExchange}
-\newcommand{\mediumSymbol}{\faMedium}
-\newcommand{\bitbucketSymbol}{\faBitbucket}
-\newcommand{\websiteSymbol}{\faLink}
-
-
-\newcommand\link[2]{\color{linkcolor}\href{#1}{#2}\color{Black} }
-\newcommand\important[1]{\textbf #1}
-
-% Create a tag
-% Usage: \cvtag{<tag label>}
-\newcommand{\cvtag}[1]{%
- \tikz[baseline]\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.55ex,text height=1.3ex,text depth=.25ex]{#1};
-}
-
-% Render author's name
-% Usage: \user{<firstanme>}{<lastname>}
-\newcommand\user[2]{\color{accentcolor}{\LARGE #1 \textsc{\textbf{#2}}}\color{Black}}
-
-% Render a text with its symbol
-% Usage; \socialtext{<icon>}{<label>}
-\newcommand{\socialtext}[2]{\mbox{\textcolor{symbolcolor}{#1}#2\hspace{0.8em}}}
-
-% Render a link with its symbol
-% Usage; \sociallink{<icon>}{<label>}
-\newcommand{\sociallink}[3]{\mbox{\textcolor{symbolcolor}{#1}\link{#2}{#3}\hspace{0.8em}}}
-
-% Define author's name
-% Usage: \name{<firstname>}{<lastname>}
-% Usage: \firstname{<firstname>}
-% Usage: \lastname{<lastname>}
-% Usage: \familyname{<familyname>}
-\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}}
-\newcommand*{\firstname}[1]{\def\@firstname{#1}}
-\newcommand*{\lastname}[1]{\def\@lastname{#1}}
-\newcommand*{\familyname}[1]{\def\@lastname{#1}}
-\def\@familyname{\@lastname}
-
-% Define author's tagline
-% Usage: \tagline{<tag line>}
-\newcommand*{\tagline}[1]{\def\@tagline{#1}}
-
-% Define author's photo
-% Usage: \photo[<shape: circular, square, roundedsquare, squircle>]{<diameter>}{<photo>}
-% The shape of the author's photo is circular by default.
-\newcommand{\photo}[3][circular]{\def\@photo{#3}\def\@photodiameter{#2}\def\@photoshape{#1}}
-
-% Render author's address
-% Usage: \address{<address>}
-\newcommand*{\address}[1]{\socialtext{\locationSymbol}{#1}}
-
-% Render author's infos
-% Usage: \infos{<infos>}
-\newcommand*{\infos}[1]{\socialtext{\infoSymbol}{#1}}
-
-% Render author's linked-in (optional)
-% Usage: \linkedin{<linked-in-nick>}
-\newcommand*{\linkedin}[1]{\sociallink{\linkedinSymbol}{http://www.linkedin.com/in/#1/fr}{linkedin.com/in/#1}}
-
-% Render author's viadeo(optional)
-% Usage: \viadeo{<viadeo-nick>}
-\newcommand*{\viadeo}[1]{\sociallink{\viadeoSymbol}{http://www.viadeo.com/fr/profile/#1}{viadeo.com/fr/profile/#1}}
-
-% Render author's github (optional)
-% Usage: \github{<github-nick>}
-\newcommand*{\github}[1]{\sociallink{\githubSymbol}{https://www.github.com/#1}{github.com/#1}} % Github icon + URL
-
-% Render author's stackoverflow profile (optional)
-% Usage: \stackoverflow{<stackoverflow-user-id>}
-\newcommand*{\stackoverflow}[1]{\sociallink{\stackoverflowSymbol}{https://www.stackoverflow.com/u/#1}{stackoverflow.com/u/#1}}
-
-% Render author's stackexchange profile (optional)
-% Usage: \stackexchange{<stackexchange-user-id>}
-\newcommand*{\stackexchange}[1]{\sociallink{\stackexchangeSymbol}{https://stackexchange.com/users/#1}{stackexchange.com/users/#1}}
-
-% Render author's medium (optional)
-% Usage: \medium{<medium-nick>}
-\newcommand*{\medium}[1]{\sociallink{\mediumSymbol}{https://www.medium.com/@#1}{medium.com/#1}}
-
-% Render author's bitbucket (optional)
-% Usage: \bitbucket{<bitbucket-account-name>}
-\newcommand*{\bitbucket}[1]{\sociallink{\bitbucketSymbol}{https://bitbucket.com/#1}{bitbucket.com/#1}}
-
-% Render author's email (optional)
-% Usage: \email{<email adress>}
-\newcommand*{\email}[1]{\sociallink{\mailSymbol}{mailto:#1}{#1}}
-
-% Render a website link (optional)
-% Usage: \website{<website name>}{<website adress>}
-\newcommand*{\website}[2]{\sociallink{\websiteSymbol}{#1}{#2}}
-
-% Render author's mobile phone (optional)
-% Usage: \smartphone{<mobile phone number>}
-\newcommand*\smartphone[1]{\socialtext{\mobileSymbol}{#1}}
-
-% Render author's tagline
-\newcommand\resumetitle[1]{
- \ifundef{\@alternative}{
- \par{
- \bigskip\center{\Large \color{accentcolor}\textbf{#1}\color{Black}}\par
- }
- \bigskip
- }{
- \color{accentcolor}\textbf{\large{#1}}\color{black}
- }
-}
-
-\newcommand\idphoto{
- \ifthenelse{\equal{\@photoshape}{square}}{
- % Draw square photo
- \tikz\path[fill overzoom image={\@photo}]rectangle(\linewidth,\linewidth);
- }{
- \ifthenelse{\equal{\@photoshape}{roundedsquare}}{
- % Draw square photo with rounded corners
- \tikz\path[fill overzoom image={\@photo}][rounded corners=2mm]rectangle(\linewidth,\linewidth);
- }{
- \ifthenelse{\equal{\@photoshape}{squircle}}{
- % Draw squircle photo
- \tikz\path[fill overzoom image={\@photo}][rounded corners=8mm]rectangle(\linewidth,\linewidth);
- }{
- % Draw circular photo
- \tikz\path[fill overzoom image={\@photo}]circle[radius=0.5\linewidth];
- }
- }
-
- }
-}
-
-% Define social entries to print in header
-\newcommand{\socialinfo}[1]{\def\@socialinfo{#1}}
-
-% Render CV header
-% Needs \@firstname, \@lastname and \@tagline to be defined
-\newcommand*{\makecvheader}{
- \ifundef{\@alternative}{
- \ifundef{\@photodiameter}{
- \begin{minipage}{\linewidth}
- }{
- \begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
- }
- \color{accentcolor}\user{\@firstname}{\@lastname}\color{black}\\
- \small{\@socialinfo}
- \end{minipage}
- \ifdef{\@photodiameter}{
- \begin{minipage}{\@photodiameter}
- \idphoto
- \end{minipage}
- }{}
- \resumetitle{\@tagline}
- }{
- \ifundef{\@photodiameter}{
- \begin{minipage}{\linewidth}
- }{
- \begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
- }
- \user{\@firstname}{\@lastname}\\
- \resumetitle{\@tagline}
- \smallskip\\
- \small{\@socialinfo}
- \end{minipage}
- \ifdef{\@photodiameter}{
- \begin{minipage}{\@photodiameter}
- \idphoto
- \end{minipage}
- }{}
- \bigskip
- }
-}
-
-% Define a footer for CV
-% Usage: \makecvfooter{<left>}{<center>}{<right>}
-\newcommand*{\makecvfooter}[3]{%
- \fancyfoot{}
- \fancyfoot[L]{#1}
- \fancyfoot[C]{#2}
- \fancyfoot[R]{#3}
-}
-
-% Resume part title definition
-\newcommand\sectionTitle[2]{\section{\texorpdfstring{\color{accentcolor}#2\enspace \textsc{#1}}{#1}}}
-
-% Define the 'keywords' environment
-\newenvironment{keywords}{%
- \renewcommand{\arraystretch}{1.1}
-
- \begin{tabular}{>{}r>{}p{13cm}}
-}{%
- \end{tabular}
-}
-
-% Render a scholarshipentry in the scolarship environment
-% Usage: \scholarshipentry{<date>}{<description>}
-\newcommand\keywordsentry[2]{
- \textbf{#1} & #2\\
-}
-
-% Define a new column type for the scholarship environment
-\newcolumntype{Y}{>{\raggedleft}p{\leftcolumnlength}}
-
-% Define the 'scholarship' environment
-\newenvironment{scholarship}{%
- \begin{tabular}{Y p{\rightcolumnlength}}
-}{%
- \end{tabular}
-}
-
-% Render a scholarshipentry in the scolarship environment
-% Usage: \scholarshipentry{<date>}{<description>}
-\newcommand\scholarshipentry[2]{
- #1 & #2 \\
-}
-
-% Define the 'skills' environment
-\newenvironment{skills}{%
- \begin{longtable}{R{\leftcolumnlength}p{\rightcolumnlength}}
-}{%
- \end{longtable}
-}
-
-% Render a skill in the skills environment
-% Usage: \skill{<skill>}{<level>}
-\newcommand\skill[2]{
- \textbf{#1} & \foreach \x in {1,...,5}{{\color{accentcolor!80} \ifnumgreater{\x}{#2}{\faCircle[regular]}{\faCircle}}\enspace } \\
-}
-
-\newcolumntype{E}{>{\raggedright\arraybackslash}p{\rightcolumnlength}}
-
-% Define the 'experiences' environment
-\newenvironment{experiences}{%
- \begin{longtable}{R{\leftcolumnlength}|E}
-}{%
- \end{longtable}
-}
-
-% Render an experience in the experiences environment
-% Usage:
-% \experience
-% {<End date>} {<Title>}{<Enterprise>}{<Country>}
-% {<Start date} {
-% <Experience description (Could be a list)>
-% }
-% {<Technology list>}
-\newcommand\experience[7]{
- \textbf{#1} & \textbf{#2, \textsc{#3}, #4} \\*
- \textbf{#5} & \begin{minipage}[t]{\rightcolumnlength}
- #6
- \end{minipage} \\*
- & \footnotesize{\foreach \n in {#7}{\cvtag{\n}}} \\
- }
-
-% Render a consultant experience in the experiences environment
-% Usage:
-% \consultantexperience
-% {<End date>} {<Consultant title>}{<Consulting Enterprise>}{<Country>}
-% {<Start date} {<Client title>}{<Client business unit>}
-% {
-% <Experience description (Could be a list)>
-% }
-% {<Technology list>}
-\newcommand\consultantexperience[9]{
- \textbf{#1} & \textbf{#2, \textsc{#3}, #4} \\*
- \textbf{#5} & \emph{#6} pour \textsc{#7} \\*
- & \begin{minipage}[t]{\rightcolumnlength}
- #8
- \end{minipage} \\*
- & \footnotesize{\foreach \n in {#9}{\cvtag{\n}}} \\
- }
-
-% Define the empty separator macro with different spacing according to document class option 'compact'
-\if@isCompact
- \newcommand\emptySeparator{\multicolumn{2}{c}{}\\[-0.6em]}
-\else
- \newcommand\emptySeparator{\multicolumn{2}{c}{}\\}
-\fi
-
-
-
-% Define the 'projects' environment
-\newenvironment{projects}{%
- \begin{longtable}{l}
-}{%
- \end{longtable}
-}
-
-% Define the 'project' entry in the 'projects' environment
-% Usage:
-% \project
-% {<Project name>}{<dates>}
-% {<link1> <link2>}
-% {<Project description>}
-% {<techno1>,<techno2>}
-\newcommand\project[5]{
- \begin{minipage}[t]{\dimexpr(\linewidth) - 1.5em}
- \textbf{\textsc{#1}} \hfill \textsc{#2}\smallskip\\
- #3\\
- #4\smallskip\\
- \footnotesize{\foreach \n in {#5}{\cvtag{\n}}}\\
- \end{minipage}
- \\*
-}
-
-
-\newcommand*\twocolumnsection[2]{
- \begin{minipage}[t]{\dimexpr(\linewidth/2) - 3em}
- #1
- \end{minipage}
- \hfill
- \begin{minipage}[t]{\dimexpr(\linewidth/2) - 3em}
- #2
- \end{minipage}
- }
-
-% Define the 'referencees' environment
-\newenvironment{referees}{%
-}{%
- \hfill
- \bigskip
-}
-
-\newcommand*\referee[5]{
- \hspace{1em}
- \begin{minipage}[t]{\dimexpr(\linewidth/3) - 3em}
- \begin{tabular}{>{}l >{}l}
- \multicolumn{2}{l}{\textbf{#1}}\\
- \multicolumn{2}{l}{\emph{#2}, \textsc{#3}}\\
- \quad \mailSymbol & \href{mailto:#4}{#4} \\
- \quad \faPhone & #5 \\
- \end{tabular}
- \end{minipage}%
- }
-
-\newcommand*\refereeMailOnly[4]{
- \hspace{1em}
- \begin{minipage}[t]{\dimexpr(\linewidth/3) - 3em}
- \begin{tabular}{>{}l >{}l}
- \multicolumn{2}{l}{\textbf{#1}}\\
- \multicolumn{2}{l}{\emph{#2}, \textsc{#3}}\\
- \quad \mailSymbol & \href{mailto:#4}{#4} \\
- \end{tabular}
- \end{minipage}%
-}
-
+yaac-another-awesome-cv/yaac-another-awesome-cv.cls \ No newline at end of file
diff --git a/LICENSE b/yaac-another-awesome-cv/LICENSE
index 4db9b5a..4db9b5a 100755
--- a/LICENSE
+++ b/yaac-another-awesome-cv/LICENSE
diff --git a/PULL_REQUEST_TEMPLATE.md b/yaac-another-awesome-cv/PULL_REQUEST_TEMPLATE.md
index 65a3c17..65a3c17 100644
--- a/PULL_REQUEST_TEMPLATE.md
+++ b/yaac-another-awesome-cv/PULL_REQUEST_TEMPLATE.md
diff --git a/README.md b/yaac-another-awesome-cv/README.md
index 1627628..1627628 100755
--- a/README.md
+++ b/yaac-another-awesome-cv/README.md
diff --git a/example/cr.png b/yaac-another-awesome-cv/example/cr.png
index 2601ea9..2601ea9 100644
--- a/example/cr.png
+++ b/yaac-another-awesome-cv/example/cr.png
Binary files differ
diff --git a/example/cv.bcf b/yaac-another-awesome-cv/example/cv.bcf
index 93892db..93892db 100644
--- a/example/cv.bcf
+++ b/yaac-another-awesome-cv/example/cv.bcf
diff --git a/example/cv.run.xml b/yaac-another-awesome-cv/example/cv.run.xml
index 082eb10..082eb10 100644
--- a/example/cv.run.xml
+++ b/yaac-another-awesome-cv/example/cv.run.xml
diff --git a/example/cv.tex b/yaac-another-awesome-cv/example/cv.tex
index 8ec1164..8ec1164 100755
--- a/example/cv.tex
+++ b/yaac-another-awesome-cv/example/cv.tex
diff --git a/example/darwiin.png b/yaac-another-awesome-cv/example/darwiin.png
index 22ae9ab..22ae9ab 100644
--- a/example/darwiin.png
+++ b/yaac-another-awesome-cv/example/darwiin.png
Binary files differ
diff --git a/example/fonts b/yaac-another-awesome-cv/example/fonts
index 35bed8b..35bed8b 120000
--- a/example/fonts
+++ b/yaac-another-awesome-cv/example/fonts
diff --git a/example/preview/cv1-alternative.jpeg b/yaac-another-awesome-cv/example/preview/cv1-alternative.jpeg
index e90bd33..e90bd33 100644
--- a/example/preview/cv1-alternative.jpeg
+++ b/yaac-another-awesome-cv/example/preview/cv1-alternative.jpeg
Binary files differ
diff --git a/example/preview/cv1.jpeg b/yaac-another-awesome-cv/example/preview/cv1.jpeg
index f202b88..f202b88 100644
--- a/example/preview/cv1.jpeg
+++ b/yaac-another-awesome-cv/example/preview/cv1.jpeg
Binary files differ
diff --git a/example/preview/cv2-alternative.jpeg b/yaac-another-awesome-cv/example/preview/cv2-alternative.jpeg
index e8cec95..e8cec95 100644
--- a/example/preview/cv2-alternative.jpeg
+++ b/yaac-another-awesome-cv/example/preview/cv2-alternative.jpeg
Binary files differ
diff --git a/example/preview/cv2.jpeg b/yaac-another-awesome-cv/example/preview/cv2.jpeg
index 8f84e94..8f84e94 100644
--- a/example/preview/cv2.jpeg
+++ b/yaac-another-awesome-cv/example/preview/cv2.jpeg
Binary files differ
diff --git a/example/sample.bib b/yaac-another-awesome-cv/example/sample.bib
index ada69a7..ada69a7 100644
--- a/example/sample.bib
+++ b/yaac-another-awesome-cv/example/sample.bib
diff --git a/example/section_competences.tex b/yaac-another-awesome-cv/example/section_competences.tex
index af3bf7b..af3bf7b 100755
--- a/example/section_competences.tex
+++ b/yaac-another-awesome-cv/example/section_competences.tex
diff --git a/example/section_experience.tex b/yaac-another-awesome-cv/example/section_experience.tex
index bb56186..bb56186 100755
--- a/example/section_experience.tex
+++ b/yaac-another-awesome-cv/example/section_experience.tex
diff --git a/example/section_experience_short.tex b/yaac-another-awesome-cv/example/section_experience_short.tex
index c57f591..c57f591 100755
--- a/example/section_experience_short.tex
+++ b/yaac-another-awesome-cv/example/section_experience_short.tex
diff --git a/example/section_headline.tex b/yaac-another-awesome-cv/example/section_headline.tex
index 668f53a..668f53a 100755
--- a/example/section_headline.tex
+++ b/yaac-another-awesome-cv/example/section_headline.tex
diff --git a/example/section_headline_archi.tex b/yaac-another-awesome-cv/example/section_headline_archi.tex
index 2d3e5d9..2d3e5d9 100644
--- a/example/section_headline_archi.tex
+++ b/yaac-another-awesome-cv/example/section_headline_archi.tex
diff --git a/example/section_interets.tex b/yaac-another-awesome-cv/example/section_interets.tex
index 8363557..8363557 100755
--- a/example/section_interets.tex
+++ b/yaac-another-awesome-cv/example/section_interets.tex
diff --git a/example/section_langues.tex b/yaac-another-awesome-cv/example/section_langues.tex
index 6a817f2..6a817f2 100755
--- a/example/section_langues.tex
+++ b/yaac-another-awesome-cv/example/section_langues.tex
diff --git a/example/section_projets.tex b/yaac-another-awesome-cv/example/section_projets.tex
index fff1904..fff1904 100644
--- a/example/section_projets.tex
+++ b/yaac-another-awesome-cv/example/section_projets.tex
diff --git a/example/section_references.tex b/yaac-another-awesome-cv/example/section_references.tex
index 367caa9..367caa9 100755
--- a/example/section_references.tex
+++ b/yaac-another-awesome-cv/example/section_references.tex
diff --git a/example/section_scolarite.tex b/yaac-another-awesome-cv/example/section_scolarite.tex
index ea0741d..ea0741d 100755
--- a/example/section_scolarite.tex
+++ b/yaac-another-awesome-cv/example/section_scolarite.tex
diff --git a/example/yaac-another-awesome-cv.cls b/yaac-another-awesome-cv/example/yaac-another-awesome-cv.cls
index 47c3c89..47c3c89 120000
--- a/example/yaac-another-awesome-cv.cls
+++ b/yaac-another-awesome-cv/example/yaac-another-awesome-cv.cls
diff --git a/fonts/SourceSansPro-Black.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-Black.otf
index 0c25f3d..0c25f3d 100755
--- a/fonts/SourceSansPro-Black.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-Black.otf
Binary files differ
diff --git a/fonts/SourceSansPro-BlackIt.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-BlackIt.otf
index da3504c..da3504c 100755
--- a/fonts/SourceSansPro-BlackIt.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-BlackIt.otf
Binary files differ
diff --git a/fonts/SourceSansPro-Bold.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-Bold.otf
index 98dbee7..98dbee7 100755
--- a/fonts/SourceSansPro-Bold.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-Bold.otf
Binary files differ
diff --git a/fonts/SourceSansPro-BoldIt.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-BoldIt.otf
index 6600c86..6600c86 100755
--- a/fonts/SourceSansPro-BoldIt.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-BoldIt.otf
Binary files differ
diff --git a/fonts/SourceSansPro-ExtraLight.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-ExtraLight.otf
index f885ce7..f885ce7 100755
--- a/fonts/SourceSansPro-ExtraLight.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-ExtraLight.otf
Binary files differ
diff --git a/fonts/SourceSansPro-ExtraLightIt.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-ExtraLightIt.otf
index f932024..f932024 100755
--- a/fonts/SourceSansPro-ExtraLightIt.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-ExtraLightIt.otf
Binary files differ
diff --git a/fonts/SourceSansPro-It.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-It.otf
index 2d627d9..2d627d9 100755
--- a/fonts/SourceSansPro-It.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-It.otf
Binary files differ
diff --git a/fonts/SourceSansPro-Light.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-Light.otf
index 159979f..159979f 100755
--- a/fonts/SourceSansPro-Light.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-Light.otf
Binary files differ
diff --git a/fonts/SourceSansPro-LightIt.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-LightIt.otf
index e3d49b5..e3d49b5 100755
--- a/fonts/SourceSansPro-LightIt.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-LightIt.otf
Binary files differ
diff --git a/fonts/SourceSansPro-Regular.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-Regular.otf
index bdcfb27..bdcfb27 100755
--- a/fonts/SourceSansPro-Regular.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-Regular.otf
Binary files differ
diff --git a/fonts/SourceSansPro-Semibold.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-Semibold.otf
index fffdbaf..fffdbaf 100755
--- a/fonts/SourceSansPro-Semibold.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-Semibold.otf
Binary files differ
diff --git a/fonts/SourceSansPro-SemiboldIt.otf b/yaac-another-awesome-cv/fonts/SourceSansPro-SemiboldIt.otf
index e90515b..e90515b 100755
--- a/fonts/SourceSansPro-SemiboldIt.otf
+++ b/yaac-another-awesome-cv/fonts/SourceSansPro-SemiboldIt.otf
Binary files differ
diff --git a/yaac-another-awesome-cv/yaac-another-awesome-cv.cls b/yaac-another-awesome-cv/yaac-another-awesome-cv.cls
new file mode 100644
index 0000000..00f7af5
--- /dev/null
+++ b/yaac-another-awesome-cv/yaac-another-awesome-cv.cls
@@ -0,0 +1,864 @@
+%% Copyright 2016 Christophe Roger
+%
+% Author:
+% Christophe Roger (Darwiin)
+%
+% Adapted:
+% Feb. 27, 2021 Suren A. Chilingaryan
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is M. C. Roger.
+%
+% This work consists of the files awesome-source-cv.cls
+
+\ProvidesClass{yaac-another-awesome-cv}[2020/03/24 v2.2.1 'YAAC: Another Awesome CV' Class]
+
+\def\@@ptsize{10pt}
+
+\DeclareOption{10pt}{\def\@@ptsize{10pt}}
+\DeclareOption{11pt}{\def\@@ptsize{11pt}}
+\DeclareOption{12pt}{\def\@@ptsize{12pt}}
+
+\ProcessOptions\relax
+
+\LoadClass[a4paper,\@@ptsize]{article}
+
+\newif\if@showLinks \@showLinksfalse
+\newif\if@isCompact \@isCompactfalse
+
+\DeclareOption{green}{
+ \def\@green{green}
+}
+
+\DeclareOption{red}{
+ \def\@red{red}
+}
+
+\DeclareOption{indigo}{
+ \def\@indigo{indigo}
+}
+\DeclareOption{orange}{
+ \def\@orange{orange}
+}
+
+\DeclareOption{monochrome}{
+ \def\@monochrome{monochrome}
+}
+
+\DeclareOption{localFont}{
+ \def\@local{local}
+}
+
+\DeclareOption{alternative}{
+ \def\@alternative{alternate}
+}
+
+\DeclareOption{dsvariant}{
+ \def\@dsvariant{ds}
+}
+
+
+\DeclareOption{showLinks}{ \@showLinkstrue}
+\DeclareOption{compact}{ \@isCompacttrue}
+
+\ProcessOptions
+
+% Dependences
+%A Few Useful Packages
+\RequirePackage[english]{babel}
+%\RequirePackage[english,french]{babel}
+\RequirePackage[utf8]{luainputenc}
+\RequirePackage{fontspec} % for loading fonts
+\RequirePackage{url,parskip} % other packages for formatting
+\RequirePackage[usenames,dvipsnames,table]{xcolor}
+\RequirePackage{fullpage}
+\RequirePackage[margin=1.5cm]{geometry}
+\RequirePackage[fixed]{fontawesome5}
+\RequirePackage{hyperref}
+\RequirePackage{titlesec}
+\RequirePackage{array}
+\RequirePackage{enumitem}
+\RequirePackage{longtable}
+\RequirePackage{etoolbox}
+\RequirePackage{tikz}
+\RequirePackage[skins]{tcolorbox}
+\RequirePackage{fancyhdr}
+\RequirePackage{ifthen}
+
+% DS: Latex complains
+%\DeclareUnicodeCharacter{00E9}{\'{e}}
+% Define default accent colors
+\definecolor{headcolor}{HTML}{000066} %BLUE
+\definecolor{basecolor}{HTML}{000000} %BLACK
+
+\ifundef{\@green} {
+ \ifundef{\@red} {
+ \ifundef{\@indigo}{
+ \ifundef{\@orange} {
+ \ifundef{\@monochrome} {}
+ { \definecolor{basecolor}{HTML}{000000}}
+ }
+ { \definecolor{basecolor}{HTML}{e68a00} }
+ }
+ { \definecolor{basecolor}{rgb}{0.2, 0.07, 0.48} }
+ }
+ { \definecolor{basecolor}{HTML}{b30000} } %RED
+}
+{ \definecolor{basecolor}{rgb}{0.0, 0.62, 0.38} }
+
+\definecolor{darkGrey}{HTML}{989898}
+
+\colorlet{linkcolor}{basecolor}
+\colorlet{accentcolor}{linkcolor!90}%{headcolor!90}
+\colorlet{symbolcolor}{linkcolor!85}
+
+% Setup hyperref package, and colours for links
+%\definecolor{linkcolour}{rgb}{0,0.2,0.6}
+
+\if@showLinks
+ \hypersetup{%
+ breaklinks
+ }%
+\else
+ \hypersetup{%
+ pdfborder = {0 0 0},
+ breaklinks
+ }%
+\fi
+
+% Setup fancyhdr package
+\fancyhf{}
+\fancyhfoffset{0em}
+% Remove head rule
+\renewcommand{\headrulewidth}{0pt}
+%\fancyfoot[C]{\thepage}
+\pagestyle{fancy}
+
+%\pagestyle{empty} % non-numbered pages
+%\font\fb=''[cmr10]'' % for use with \LaTeX command
+
+% Setup CV sections
+\titleformat{\section}{\Large\raggedright}{}{0em}{}[\titlerule]
+\titlespacing{\section}{0pt}{2pt}{2pt}
+
+% Configure list
+\setlist[itemize,1]{label=\faAngleRight, nosep, leftmargin=2em}
+\setlist[itemize,2]{label=\faAngleRight, nosep, leftmargin=1.5em}
+
+% Setup Array : new column type
+\newcolumntype{R}[1]{>{\hfill}m{#1}}
+
+%Italian hyphenation for the word: ''corporations''
+\hyphenation{im-pre-se}
+
+% Setup fonts
+\defaultfontfeatures{Mapping=tex-text}
+%
+
+% Define font to use according to localFont option
+\ifundef{\@local}
+{
+% DS: Original fonts are ugly
+% \setmainfont[BoldFont = Helvetica Neue, ItalicFont=Helvetica Neue Thin Italic ,SmallCapsFont = Helvetica Neue Light]{Helvetica Neue Thin}
+% \setmainfont{Source Sans Pro Light}[BoldFont = SourceSansPro-Regular, ItalicFont= Source Sans Pro Light Italic]
+% \setmainfont{TeX Gyre Termes}
+% \setmainfont{TeX Gyre Pagella}
+% \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
+ \setmainfont{Liberation Serif}[
+% Ligatures=TeX,
+% ItalicFont=* Italic,
+% BoldFont=* Bold,
+% BoldItalicFont=* Bold Italic,
+% UprightFont=* Regular,
+ SmallCapsFont=Latin Modern Roman Caps
+ ]
+ \setsansfont{Liberation Sans}[SmallCapsFont={Liberation Sans}]
+ \setmonofont{Liberation Mono}[SmallCapsFont={Liberation Mono}]
+
+}
+{
+ \setmainfont{SourceSansPro-Light}[
+ Path = fonts/,
+ BoldFont = SourceSansPro-Regular,
+ ItalicFont = SourceSansPro-LightIt]
+}
+
+% DS: Adapt default parameters
+\newlength{\topoffset}
+\setlength{\topoffset}{0.2em}
+
+%New length definition
+\newlength{\fulllength}
+%\setlength{\fulllength}{17.8cm}
+\setlength{\fulllength}{17.0cm}
+
+\newlength{\topleftcolumnlength}
+\setlength{\topleftcolumnlength}{4cm}
+\newlength{\toprightcolumnlength}
+\setlength{\toprightcolumnlength}{\dimexpr(\fulllength-\topleftcolumnlength)\relax}
+
+\newlength{\leftcolumnlength}
+\setlength{\leftcolumnlength}{2.5cm}
+
+\newlength{\rightcolumnlength}
+%\setlength{\rightcolumnlength}{15.3cm minus 1cm}
+%\setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
+\setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
+
+% Override default left column length of (2.5cm)
+% Usage: \setleftcolumnlength{<length>}
+\newcommand{\setleftcolumnlength}[1]{
+ \setlength{\leftcolumnlength}{#1}
+ \setlength{\rightcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength)\relax}
+}
+
+% Font Awesome icons aliases
+\newcommand{\mailSymbol}{\faAt}
+\newcommand{\locationSymbol}{\faMapMarker*}
+\newcommand{\infoSymbol}{\faInfo}
+\newcommand{\linkedinSymbol}{\faLinkedinIn}
+\newcommand{\viadeoSymbol}{\faViadeo}
+\newcommand{\mobileSymbol}{\faMobile*}
+\newcommand{\githubSymbol}{\faGithub}
+\newcommand{\stackoverflowSymbol}{\faStackOverflow}
+\newcommand{\stackexchangeSymbol}{\faStackExchange}
+\newcommand{\mediumSymbol}{\faMedium}
+\newcommand{\bitbucketSymbol}{\faBitbucket}
+\newcommand{\websiteSymbol}{\faLink}
+
+
+\newcommand\link[2]{\color{linkcolor}\href{#1}{#2}\color{Black} }
+\newcommand\important[1]{\textbf #1}
+
+% Create a tag
+% Usage: \cvtag{<tag label>}
+\newcommand{\cvtag}[1]{%
+ \tikz[baseline]\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.55ex,text height=1.3ex,text depth=.25ex]{#1};
+}
+
+% Render author's name
+% Usage: \user{<firstanme>}{<lastname>}
+\newcommand\user[2]{\color{accentcolor}{\LARGE #1 \textsc{\textbf{#2}}}\color{Black}}
+
+% Render a text with its symbol
+% Usage; \socialtext{<icon>}{<label>}
+\newcommand{\socialtext}[2]{\mbox{\textcolor{symbolcolor}{#1}#2\hspace{0.8em}}}
+
+% Render a link with its symbol
+% Usage; \sociallink{<icon>}{<label>}
+\newcommand{\sociallink}[3]{\mbox{\textcolor{symbolcolor}{#1}\link{#2}{#3}\hspace{0.8em}}}
+
+% Define author's name
+% Usage: \name{<firstname>}{<lastname>}
+% Usage: \firstname{<firstname>}
+% Usage: \lastname{<lastname>}
+% Usage: \familyname{<familyname>}
+\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}}
+\newcommand*{\firstname}[1]{\def\@firstname{#1}}
+\newcommand*{\lastname}[1]{\def\@lastname{#1}}
+\newcommand*{\familyname}[1]{\def\@lastname{#1}}
+\def\@familyname{\@lastname}
+
+% Define author's tagline
+% Usage: \tagline{<tag line>}
+\newcommand*{\tagline}[1]{\def\@tagline{#1}}
+
+% Define author's photo
+% Usage: \photo[<shape: circular, square, roundedsquare, squircle>]{<diameter>}{<photo>}
+% The shape of the author's photo is circular by default.
+\newcommand{\photo}[3][circular]{\def\@photo{#3}\def\@photodiameter{#2}\def\@photoshape{#1}}
+
+% Render author's address
+% Usage: \address{<address>}
+\newcommand*{\address}[1]{\socialtext{\locationSymbol}{#1}}
+
+% Render author's infos
+% Usage: \infos{<infos>}
+\newcommand*{\infos}[1]{\socialtext{\infoSymbol}{#1}}
+
+% DS: Defrancise, shorten
+% Render author's linked-in (optional)
+% Usage: \linkedin{<linked-in-nick>}
+%\newcommand*{\linkedin}[1]{\sociallink{\linkedinSymbol}{http://www.linkedin.com/in/#1/fr}{linkedin.com/in/#1}}
+\newcommand*{\linkedin}[1]{\sociallink{\linkedinSymbol}{http://www.linkedin.com/in/#1}{linkedin}}
+%\newcommand*{\linkedin}[1]{\sociallink{\linkedinSymbol}{http://www.linkedin.com/in/#1}{#1}}
+
+% Render author's viadeo(optional)
+% Usage: \viadeo{<viadeo-nick>}
+\newcommand*{\viadeo}[1]{\sociallink{\viadeoSymbol}{http://www.viadeo.com/fr/profile/#1}{viadeo.com/fr/profile/#1}}
+
+% Render author's github (optional)
+% Usage: \github{<github-nick>}
+\newcommand*{\github}[1]{\sociallink{\githubSymbol}{https://www.github.com/#1}{github.com/#1}} % Github icon + URL
+
+% Render author's stackoverflow profile (optional)
+% Usage: \stackoverflow{<stackoverflow-user-id>}
+\newcommand*{\stackoverflow}[1]{\sociallink{\stackoverflowSymbol}{https://www.stackoverflow.com/u/#1}{stackoverflow.com/u/#1}}
+
+% Render author's stackexchange profile (optional)
+% Usage: \stackexchange{<stackexchange-user-id>}
+\newcommand*{\stackexchange}[1]{\sociallink{\stackexchangeSymbol}{https://stackexchange.com/users/#1}{stackexchange.com/users/#1}}
+
+% Render author's medium (optional)
+% Usage: \medium{<medium-nick>}
+\newcommand*{\medium}[1]{\sociallink{\mediumSymbol}{https://www.medium.com/@#1}{medium.com/#1}}
+
+% Render author's bitbucket (optional)
+% Usage: \bitbucket{<bitbucket-account-name>}
+\newcommand*{\bitbucket}[1]{\sociallink{\bitbucketSymbol}{https://bitbucket.com/#1}{bitbucket.com/#1}}
+
+% Render author's email (optional)
+% Usage: \email{<email adress>}
+\newcommand*{\email}[1]{\sociallink{\mailSymbol}{mailto:#1}{#1}}
+
+% Render a website link (optional)
+% Usage: \website{<website name>}{<website adress>}
+\newcommand*{\website}[2]{\sociallink{\websiteSymbol}{#1}{#2}}
+
+% Render author's mobile phone (optional)
+% Usage: \smartphone{<mobile phone number>}
+\newcommand*\smartphone[1]{\socialtext{\mobileSymbol}{#1}}
+
+% Render author's tagline
+\newcommand\resumetitle[1]{
+ \ifundef{\@alternative}{
+ \par{
+ \bigskip\center{\Large \color{accentcolor}\textbf{#1}\color{Black}}\par
+ }
+ \bigskip
+ }{
+ \color{accentcolor}\textbf{\large{#1}}\color{black}
+ }
+}
+
+\newcommand\idphoto{
+ \ifthenelse{\equal{\@photoshape}{square}}{
+ % Draw square photo
+ \tikz\path[fill overzoom image={\@photo}]rectangle(\linewidth,\linewidth);
+ }{
+ \ifthenelse{\equal{\@photoshape}{roundedsquare}}{
+ % Draw square photo with rounded corners
+ \tikz\path[fill overzoom image={\@photo}][rounded corners=2mm]rectangle(\linewidth,\linewidth);
+ }{
+ \ifthenelse{\equal{\@photoshape}{squircle}}{
+ % Draw squircle photo
+ \tikz\path[fill overzoom image={\@photo}][rounded corners=8mm]rectangle(\linewidth,\linewidth);
+ }{
+ % Draw circular photo
+ \tikz\path[fill overzoom image={\@photo}]circle[radius=0.5\linewidth];
+ }
+ }
+
+ }
+}
+
+% Define social entries to print in header
+\newcommand{\socialinfo}[1]{\def\@socialinfo{#1}}
+\newcommand{\headermsg}[1]{\def\@headermsg{#1}}
+
+% Render CV header
+% Needs \@firstname, \@lastname and \@tagline to be defined
+\newcommand*{\makecvheader}{
+ \ifdef{\@dsvariant}{
+ \ifundef{\@photodiameter}{
+ \begin{minipage}{\linewidth}
+ }{
+ \begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
+ }
+ \ifundef{\@tagline}{
+ \user{\@firstname}{\@lastname}
+ }{
+ \user{\@firstname}{\@lastname}\\
+ \resumetitle{\@tagline}
+ }
+ \vskip-\topskip\vskip0.3em\rule{\linewidth}{0.1pt}
+ \smallskip
+ \begin{tabular}{>{\raggedright}m{\topleftcolumnlength} m{\toprightcolumnlength}}
+ \noalign{\vskip\topoffset}
+ \small{\@socialinfo} & \@headermsg
+ \end{tabular}
+ \end{minipage}
+
+ \ifdef{\@photodiameter}{
+ \begin{minipage}{\@photodiameter}
+ \idphoto
+ \end{minipage}
+ }{}
+ \bigskip
+ }{
+ \ifundef{\@alternative}{
+ \ifundef{\@photodiameter}{
+ \begin{minipage}{\linewidth}
+ }{
+ \begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
+ }
+ \color{accentcolor}\user{\@firstname}{\@lastname}\color{black}\\
+ \small{\@socialinfo}
+ \end{minipage}
+ \ifdef{\@photodiameter}{
+ \begin{minipage}{\@photodiameter}
+ \idphoto
+ \end{minipage}
+ }{}
+ \resumetitle{\@tagline}
+ }{
+ \ifundef{\@photodiameter}{
+ \begin{minipage}{\linewidth}
+ }{
+ \begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
+ }
+ \user{\@firstname}{\@lastname}\\
+ \resumetitle{\@tagline}
+ \smallskip\\
+ \small{\@socialinfo}
+ \end{minipage}
+ \ifdef{\@photodiameter}{
+ \begin{minipage}{\@photodiameter}
+ \idphoto
+ \end{minipage}
+ }{}
+ \bigskip
+ }
+ }
+}
+
+% Define a footer for CV
+% Usage: \makecvfooter{<left>}{<center>}{<right>}
+\newcommand*{\makecvfooter}[3]{%
+ \fancyfoot{}
+ \fancyfoot[L]{#1}
+ \fancyfoot[C]{#2}
+ \fancyfoot[R]{#3}
+}
+
+% Resume part title definition
+\newcommand\sectionTitle[2]{\section{\texorpdfstring{\color{accentcolor}#2\enspace \textsc{#1}}{#1}}}
+
+% Define the 'keywords' environment
+\newenvironment{keywords}{%
+ \renewcommand{\arraystretch}{1.1}
+
+ \begin{tabular}{>{}r>{}p{13cm}}
+}{%
+ \end{tabular}
+}
+
+
+
+% Render a scholarshipentry in the scolarship environment
+% Usage: \scholarshipentry{<date>}{<description>}
+\newcommand\keywordsentry[2]{
+ \textbf{#1} & #2\\
+}
+
+% Define a new column type for the scholarship environment
+\newcolumntype{Y}{>{\raggedleft}p{\leftcolumnlength}}
+
+% Define the 'scholarship' environment
+\newenvironment{scholarship}{%
+ \begin{tabular}{Y p{\rightcolumnlength}}
+}{%
+ \end{tabular}
+}
+
+% Render a scholarshipentry in the scolarship environment
+% Usage: \scholarshipentry{<date>}{<description>}
+\newcommand\scholarshipentry[2]{
+ #1 & #2 \\
+}
+
+% Define the 'skills' environment
+\newenvironment{skills}{%
+ \begin{longtable}{R{\leftcolumnlength}p{\rightcolumnlength}}
+}{%
+ \end{longtable}
+}
+
+% Render a skill in the skills environment
+% Usage: \skill{<skill>}{<level>}
+\newcommand\skill[2]{
+ \textbf{#1} & \foreach \x in {1,...,5}{{\color{accentcolor!80} \ifnumgreater{\x}{#2}{\faCircle[regular]}{\faCircle}}\enspace } \\
+}
+
+\newcolumntype{E}{>{\raggedright\arraybackslash}p{\rightcolumnlength}}
+
+% Define the 'experiences' environment
+\newenvironment{experiences}{%
+ \begin{longtable}{R{\leftcolumnlength}|E}
+}{%
+ \end{longtable}
+}
+
+% Render an experience in the experiences environment
+% Usage:
+% \experience
+% {<End date>} {<Title>}{<Enterprise>}{<Country>}
+% {<Start date} {
+% <Experience description (Could be a list)>
+% }
+% {<Technology list>}
+\newcommand\experience[7]{
+ \textbf{#1} & \textbf{#2, \textsc{#3}, #4} \\*
+ \textbf{#5} & \begin{minipage}[t]{\rightcolumnlength}
+ #6
+ \end{minipage} \\*
+ & \footnotesize{\foreach \n in {#7}{\cvtag{\n}}} \\
+ }
+
+% Render a consultant experience in the experiences environment
+% Usage:
+% \consultantexperience
+% {<End date>} {<Consultant title>}{<Consulting Enterprise>}{<Country>}
+% {<Start date} {<Client title>}{<Client business unit>}
+% {
+% <Experience description (Could be a list)>
+% }
+% {<Technology list>}
+\newcommand\consultantexperience[9]{
+ \textbf{#1} & \textbf{#2, \textsc{#3}, #4} \\*
+ \textbf{#5} & \emph{#6} pour \textsc{#7} \\*
+ & \begin{minipage}[t]{\rightcolumnlength}
+ #8
+ \end{minipage} \\*
+ & \footnotesize{\foreach \n in {#9}{\cvtag{\n}}} \\
+ }
+
+% Define the empty separator macro with different spacing according to document class option 'compact'
+\if@isCompact
+ \newcommand\emptySeparator{\multicolumn{2}{c}{}\\[-0.6em]}
+\else
+ \newcommand\emptySeparator{\multicolumn{2}{c}{}\\}
+\fi
+
+
+
+% Define the 'projects' environment
+\newenvironment{projects}{%
+ \begin{longtable}{l}
+}{%
+ \end{longtable}
+}
+
+% Define the 'project' entry in the 'projects' environment
+% Usage:
+% \project
+% {<Project name>}{<dates>}
+% {<link1> <link2>}
+% {<Project description>}
+% {<techno1>,<techno2>}
+\newcommand\project[5]{
+ \begin{minipage}[t]{\dimexpr(\linewidth) - 1.5em}
+ \textbf{\textsc{#1}} \hfill \textsc{#2}\smallskip\\
+ #3\\
+ #4\smallskip\\
+ \footnotesize{\foreach \n in {#5}{\cvtag{\n}}}\\
+ \end{minipage}
+ \\*
+}
+
+
+\newcommand*\twocolumnsection[2]{
+ \begin{minipage}[t]{\dimexpr(\linewidth/2) - 3em}
+ #1
+ \end{minipage}
+ \hfill
+ \begin{minipage}[t]{\dimexpr(\linewidth/2) - 3em}
+ #2
+ \end{minipage}
+ }
+
+% Define the 'referencees' environment
+\newenvironment{referees}{%
+}{%
+ \hfill
+ \bigskip
+}
+
+\newcommand*\referee[5]{
+ \hspace{1em}
+ \begin{minipage}[t]{\dimexpr(\linewidth/3) - 3em}
+ \begin{tabular}{>{}l >{}l}
+ \multicolumn{2}{l}{\textbf{#1}}\\
+ \multicolumn{2}{l}{\emph{#2}, \textsc{#3}}\\
+ \quad \mailSymbol & \href{mailto:#4}{#4} \\
+ \quad \faPhone & #5 \\
+ \end{tabular}
+ \end{minipage}%
+ }
+
+\newcommand*\refereeMailOnly[4]{
+ \hspace{1em}
+ \begin{minipage}[t]{\dimexpr(\linewidth/3) - 3em}
+ \begin{tabular}{>{}l >{}l}
+ \multicolumn{2}{l}{\textbf{#1}}\\
+ \multicolumn{2}{l}{\emph{#2}, \textsc{#3}}\\
+ \quad \mailSymbol & \href{mailto:#4}{#4} \\
+ \end{tabular}
+ \end{minipage}%
+}
+
+% DS: Extensions
+\RequirePackage{academicons}
+\RequirePackage{ragged2e}
+\RequirePackage{makecell}
+\RequirePackage{fontawesome5}
+\usepackage{ifthen}
+\usepackage[nodisplayskipstretch]{setspace}
+\usepackage{mfirstuc}
+\usepackage{booktabs}
+
+%\RequirePackage{xparse}
+%\RequirePackage{tabularx}
+%\RequirePackage{multicol}
+%\RequirePackage{extdash}
+
+%Configs
+%\setstretch{1}
+
+\newcommand\ifemptyelse[3]{\ifthenelse{\equal{#1}{}}{#2}{#3}}
+\def \ifempty#1{\def\temp{#1} \ifx\temp\empty}
+\renewcommand{\cellalign}{tl}
+
+%Symbols
+\newcommand{\skypeSymbol}{\faSkype}
+\newcommand{\scholarSymbol}{\hskip1ex\aiGoogleScholar}
+\newcommand{\orcidSymbol}{\hskip1ex\aiOrcid}
+\newcommand{\rgSymbol}{\hskip1ex\aiResearchGate}
+
+%\def\faSourcetree{{\FontAwesomeBrands\csname faicon@sourcetree\endcsname}}
+\newcommand{\ossSymbol}{\faSourcetree}
+
+% Markup
+\newcommand{\hltag}[1]{% highlight (or red!10)
+ \tikz[baseline]\node[anchor=base,draw=darkGrey!70,fill=darkGrey!20,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.55ex,text height=1.3ex,text depth=.25ex]{#1};
+}
+
+% Links, etc.
+\newcommand*{\urlref}[2]{\href{#2}{#1}}
+\newcommand*{\oss}[2]{\link{#2}{\ossSymbol #1}}
+
+% Contacts
+\newcommand*{\skype}[1]{\sociallink{\skypeSymbol}{skype:#1}{#1}}
+%\newcommand*{\scholar}[1]{\sociallink{\scholarSymbol}{https://scholar.google.com/citations?user=#1}{#1}}
+%\newcommand*{\orcid}[1]{\sociallink{\orcidSymbol}{https://orcid.org/#1}{#1}}
+%\newcommand*{\rg}[1]{\sociallink{\rgSymbol}{https://www.researchgate.net/profile/#1}{#1}}
+
+\newcommand*{\scholar}[2]{\sociallink{\scholarSymbol}{https://scholar.google.com/citations?user=#1}{#2}}
+\newcommand*{\scholarlink}[2]{\urlref{#2}{https://scholar.google.com/citations?user=#1}}
+
+\newcommand*{\orcid}[2]{\sociallink{\orcidSymbol}{https://orcid.org/#1}{#2}}
+\newcommand*{\orcidlink}[2]{\urlref{#2}{https://orcid.org/#1}}
+\newcommand*{\rg}[2]{\sociallink{\rgSymbol}{https://www.researchgate.net/profile/#1}{#2}}
+\newcommand*{\rglink}[2]{\urlref{#2}{https://www.researchgate.net/profile/#1}}
+
+% References
+\newcommand\refstd{\emph}
+\newcommand\reflinked[1]{\hyperlink{#1}{\emph{#1}}}
+\newcommand\refuni{\refstd}
+\newcommand\refexp{\reflinked}
+\newcommand\reffac{\reflinked}
+\newcommand\refcol{\reflinked}
+\newcommand\refproj[1]{\hyperlink{proj:#1}{\emph{#1}}}
+\newcommand\refsoft[1]{\hyperlink{soft:#1}{\emph{#1}}}
+
+\newcommand\hlnone[1]{#1}
+\newcommand\hlbold[1]{\textbf{#1}}
+\newcommand\hlcolor[1]{\textcolor{headcolor}{#1}}
+
+\newcommand\hltitle{\hlbold}
+\newcommand\hljob{\hlbold}
+\newcommand\hlsoft{\hlnone}
+\newcommand\hlverb{\hlnone}
+\newcommand\hlrole{\hlnone}
+\newcommand\hltype{\hlnone}
+\newcommand\hlproj{\hlnone}
+
+% Dates
+\newcommand\since[1]{Since #1}
+\newcommand\ivl[2]{#1 -- #2}
+\newcommand\at[2]{#1 #2}
+
+%Sizes
+
+%\newlength{\tricolumnlength}
+%\setlength{\tricolumnlength}{2cm}
+%\newlength{\midcolumnlength}
+%\setlength{\midcolumnlength}{\dimexpr(\fulllength-\leftcolumnlength-\tricolumnlength)\relax}
+
+% Running titles
+%\newcommand\subtitle[2]{\section{\texorpdfstring{\color{accentcolor}#2\enspace \textsc{#1}}{#1}}}
+\newcommand\subtitle[2]{\section{\texorpdfstring{\textsc{#1}}{#1}}}
+
+% Column types
+\newcolumntype{C}{>{\raggedright}p{\topleftcolumnlength}}
+\newcolumntype{K}{p{\toprightcolumnlength}}
+
+%\newcolumntype{L}{>{\raggedright}p{\leftcolumnlength}}
+\newcolumntype{L}{>{\raggedleft}p{\leftcolumnlength}}
+\newcolumntype{R}{p{\rightcolumnlength}}
+
+
+% Lists
+%\newenvironment{tricoltable}{\begin{longtable}{L p{\midcolumnlength} p{\tricolumnlength}}}{\end{longtable}}
+\newenvironment{categories}{\begin{tabular}{C K}}{\end{tabular}}
+\newenvironment{jobs}{\begin{longtable}{C K}}{\end{longtable}}
+\newenvironment{events}{\begin{longtable}{L | R}}{\end{longtable}}
+
+%\setlength{\arrayrulewidth}{1mm}
+ %\makeatletter
+%\def\CT@arc#1#2{\ifdim\baselineskip=\z@\noalign\fi{\gdef\CT@arc@{\color#1{#2}}}}\let\CT@arc@\relax
+%\def\rulecolor#1#{\CT@arc{#1}}
+%\rulecolor{gray!50}
+
+\arrayrulecolor{gray!50}
+\newenvironment{complexevents}{%
+ \renewcommand{\arraystretch}{1.4}%
+ \begin{longtable}{L | R}%
+}{%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1.0}%
+}
+
+\newenvironment{verycomplexevents}{%
+ \renewcommand{\arraystretch}{1.4}%
+ \begin{longtable}{L | R}%
+}{%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1.0}%
+}
+
+\newcommand\subsectiontitle[1]{%
+ \multicolumn{2}{l}{%
+ \hspace{\leftcolumnlength}\hspace{1em}\textbf{#1}%
+ } \\\cline{2-2}%
+}
+
+\newcommand\eventsection[2]{%
+ \ifx #2\empty\else
+ \end{#2}%
+ \vspace{-1em}%
+ \begin{#2}%
+ \fi
+ \multicolumn{2}{l}{%
+ \hspace{\leftcolumnlength}\hspace{1em}\textbf{#1}%
+ } \\\cline{2-2}%
+}
+
+\newcommand\datedeventsection[3]{%
+ \ifx #3\empty\else
+ \end{#3}%
+ \vspace{-1em}%
+ \begin{#3}%
+ \fi%
+ \enspace \textbf{#1} & \textbf{#2} \\\hline
+}
+
+
+
+% Usage: \category{<name>}{<keywords>}
+\newcommand\category[2]{ \textbf{#1} & #2 \\}
+
+% Usage: \event {<dates>} [<Title>][at]{Details}
+\newcommand\event[2]{\enspace #1 & #2\\}
+
+%\newcommand\triplevent[3]{ \enspace #1 & #2 & #3 \\ }
+%\newcommand\tripleventsection[2]{ \enspace \underline{\textbf{#1}} & \textbf{#2} & xxx \\ }
+
+% \activity {dates} {name} {long_name} {description} {responsibilities}
+
+\newcommand\titledevent[3]{\event{#1}{\hltitle{#2} #3}}
+\newcommand\jobevent[4]{\event{#1}{\hljob{#2} at\ifempty{#4}#3\else #3. #4\fi}}
+%\newcommand\jobevent[4]{\event{#1}{\textbf{#2} at #3. #4}}
+\newcommand\linkedevent[3]{\event{#1}{\urlref{#2}{#3}}}
+
+\newcommand\excofa[5]{\noalign{\hypertarget{#2}{}} \linkedevent{#1}{\ifemptyelse{#3}{\hlproj{#2}}{\hlproj{#2}: #3}\ifemptyelse{#5}{}{ \emph{(#5)}}}{#4}}
+\newcommand\experiment[5]{\excofa{#1}{#2}{#3}{#4}{#5}} % \emph{(Collaborator)}}}
+\newcommand\collaboration[5]{\excofa{#1}{#2}{#3}{#4}{#5}}% \emph{(Collaborator)}}}
+\newcommand\facility[5]{\excofa{#1}{#2}{#3}{#4}{#5}}% \emph{(Contributor)}}}
+
+\newcommand\funding[7]{\noalign{\foreach \n in {#4}{\hypertarget{proj:\n}{}}} \event{#1}{
+%\newcommand\funding[7]{\noalign{\ifemptyelse{#7}{}{\foreach \n in {#7}{\hypertarget{XXX}{}}}} \event{#1}{
+ \begin{minipage}[t]{\dimexpr(\linewidth)}
+ \hlrole{#5}: #6 \\ % #7
+ \footnotesize{\hltag{#2} \foreach \n in {#3}{\cvtag{\n}}}
+ \end{minipage}
+}}
+
+\newcommand\leadership[5]{\event{#1}{
+ \begin{minipage}[t]{\dimexpr(\linewidth)}
+ \hlverb{#2} #3 \\
+ #4: \footnotesize{\foreach \n in {#5}{\cvtag{\n}}}
+ \end{minipage}
+}}
+
+\newcommand\responsibility[3]{\event{#1}{\makefirstuc{#3}}}
+
+\newcommand\software[7]{\noalign{\hypertarget{soft:#2}{}} \event{#1}{
+ \begin{minipage}[t]{\dimexpr(\linewidth)}
+ \hlsoft{\urlref{#2}{http://#3}}: \ifemptyelse{#7}{#6}{#6 (\emph{#7})}
+ \ifemptyelse{#4#3}{}{
+ \\ \footnotesize{
+ \ifemptyelse{#3}{}{
+ \hltag{\urlref{#3}{http://#3}}
+ }
+ \foreach \n in {#4}{\cvtag{\hyperlink{\n}{\n}}}
+ }
+ }
+ \end{minipage}
+}}
+
+\newcommand\obsolete[7]{\event{#1}{
+ \hlsoft{\urlref{#2}{http://#3}}: \ifemptyelse{#7}{#6}{#6 (\emph{#7})}
+}}
+
+\newcommand*{\toright}[1]{%
+ \nobreak\hfill\penalty50\hskip1em\null\nobreak%
+ \hfill #1\parfillskip=0pt \finalhyphendemerits=0 \par}
+
+\newcommand\rnd[5]{\event{#1}{%
+ \begin{minipage}[t]{\dimexpr(\linewidth)}%
+ \hlverb{#4} #5%
+ \footnotesize{\toright{%
+ \ifemptyelse{#2}{%
+ \foreach \n in {#3}{\hyperlink{\n}{\hltag{\n}}}%
+ }{%
+ \foreach \n in {#2}{\hyperlink{soft:\n}{\hltag{\n}}}%
+ }}}%
+ \end{minipage}%
+}}
+
+\newcommand\research[5]{\rnd{#1}{#2}{#3}{#4}{#5}}
+\newcommand\technology[5]{\rnd{#1}{#2}{#3}{#4}{#5}}
+
+\newcommand\supervision[3]{\event{#1}{\hlverb{#2} #3}}
+\newcommand\teaching[3]{\event{#1}{\hlverb{#2} #3}}
+
+\newcommand\outreach[5]{\event{\footnotesize{#1}}{
+ \footnotesize{
+ \ifemptyelse{#2}{\hltype{talk}}{%
+ \hltype{#2}
+ } "\emph{#3}" at #4
+}}}
+
+\newcommand\conference[5]{\outreach{#1}{#2}{#3}{#4}{#5}}
+\newcommand\workshop[5]{\outreach{#1}{#2}{#3}{#4}{#5}}
+\newcommand\seminar[5]{\outreach{#1}{#2}{#3}{#4}{#5}}
+
+%\NewDocumentCommand{\jobevent}{mmmO{}}{\event{#1}{#2 #3 x}}
+%\event{#1}{\textbf{#2} at #3 \IfNoValueTF{}{. #4}}
+
+% Literature
+\usepackage[backend=biber,style=ieee,sorting=ydnt,maxnames=1,mincitenames=1,minbibnames=1,minsortnames=1]{biblatex}
+%\renewcommand*{\bibfont}{\small}
+\renewcommand*{\bibfont}{\footnotesize}
+\usepackage{titling}
+