diff options
author | Karl Berry <karl@freefriends.org> | 2018-06-24 21:57:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-06-24 21:57:27 +0000 |
commit | c4bb697eced0fab994df2daf28104ba68e977bcc (patch) | |
tree | 2325a1699a36aa9597b42fd85b0c51de0f44adb1 /Master | |
parent | dd42876a9fee2d151acc9477f3f9faf2e1475ce2 (diff) |
dashundergaps (24jun18)
git-svn-id: svn://tug.org/texlive/trunk@48081 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
15 files changed, 1117 insertions, 3537 deletions
diff --git a/Master/texmf-dist/doc/latex/dashundergaps/README b/Master/texmf-dist/doc/latex/dashundergaps/README deleted file mode 100644 index 5b4692d9b9e..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/README +++ /dev/null @@ -1,12 +0,0 @@ -This is the README file of the dashundergaps package v1.2 by Merciadri Luca. - -To use the dashundergaps package correctly, please install the .sty -file in your LaTeX distribution, or use it in the directories of your -files which use dashundergaps. - -This material is subject to the LaTeX project Public License. See -http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for -the details of that license. - -You can have more info on this at -http://www.student.montefiore.ulg.ac.be/~merciadri/#dashundergapspckg. diff --git a/Master/texmf-dist/doc/latex/dashundergaps/README.md b/Master/texmf-dist/doc/latex/dashundergaps/README.md new file mode 100644 index 00000000000..62bcbe16186 --- /dev/null +++ b/Master/texmf-dist/doc/latex/dashundergaps/README.md @@ -0,0 +1,23 @@ +# dashundergaps package + +----- + +This package is a reimplementation of a package with the same name +written by Luca Merciadri in 2010. Luca is no longer maintaining it +and so I thought I provide this update. It should be a drop-in +replacement (except for fixing a few bugs and adding a few additional +features). See manual for details. + +Package source can be found below: + +https://github.com/FrankMittelbach/fmitex/ + +The license is LPPL. + +----- + +Copyright (C) 2018 Frank Mittelbach<br /> +<https://latex-project.org/> <br /> +All rights reserved. + + diff --git a/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.pdf b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.pdf Binary files differnew file mode 100644 index 00000000000..97cd39b048e --- /dev/null +++ b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.pdf diff --git a/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.tex b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.tex new file mode 100644 index 00000000000..caf85830e56 --- /dev/null +++ b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps-code.tex @@ -0,0 +1,5 @@ +% this will typeset documentation + code + +\AtBeginDocument{\AlsoImplementation} +\input{dashundergaps.dtx} + diff --git a/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.pdf b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.pdf Binary files differnew file mode 100644 index 00000000000..50f842b0c41 --- /dev/null +++ b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.pdf diff --git a/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.tex b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.tex new file mode 100644 index 00000000000..b5590388077 --- /dev/null +++ b/Master/texmf-dist/doc/latex/dashundergaps/dashundergaps.tex @@ -0,0 +1,4 @@ +% this will typeset only documentation but not the code + +\AtBeginDocument{\OnlyDescription} +\input{dashundergaps.dtx} diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/pdf/dashundergaps.pdf b/Master/texmf-dist/doc/latex/dashundergaps/doc/pdf/dashundergaps.pdf Binary files differdeleted file mode 100644 index a08c4c21f62..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/pdf/dashundergaps.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/Makefile b/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/Makefile deleted file mode 100644 index 11e2e979d1c..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/Makefile +++ /dev/null @@ -1,3004 +0,0 @@ -# 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.1.34 -svninfo := $$Id$$ -# -# If you specify sources here, all other files with the same suffix -# will be treated as if they were _include_ files. -#onlysources.tex ?= main.tex -#onlysources.tex.sh ?= -#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.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. --include Makefile.ini - -# TODO: -# * Sometimes we get -# "mv: cannot stat '*.dvi.1st.make': No such file or directory" -# on the second build (if nothing triggered a .d rebuild, but -# the .dvi rule fired anyway). To reproduce in the -# dissertation directory: -# -# make clean -# make byumsphd-example -# make byumsphd-example -# -# 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 (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 -MV ?= mv -f -SED ?= sed -SORT ?= sort -TOUCH ?= touch -UNIQ ?= uniq -WHICH ?= which -XARGS ?= xargs -# == LaTeX (tetex-provided) == -BIBTEX ?= bibtex -DVIPS ?= dvips -LATEX ?= latex -MAKEINDEX ?= makeindex -KPSEWHICH ?= kpsewhich -PS2PDF_NORMAL ?= ps2pdf -PS2PDF_EMBED13 ?= ps2pdf13 -PS2PDF_EMBED ?= ps2pdf14 -# = OPTIONAL PROGRAMS = -# == Makefile Color Output == -TPUT ?= tput -# == TeX Generation == -RST2LATEX ?= rst2latex.py -# == EPS Generation == -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 - -# 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)) - -# 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_ - -# Fall back to ps2pdf13 (and ultimately ps2pdf) if ps2pdf14 is not on the system: -PS2PDF_EMBED := \ - $(if \ - $(shell $(WHICH) $(PS2PDF_EMBED)), \ - $(PS2PDF_EMBED), \ - $(if \ - $(shell $(WHICH) $(PS2PDF_EMBED13)), \ - $(PS2PDF_EMBED13), \ - $(PS2PDF_NORMAL) \ - ) \ - ) - -# 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 -# - -# While not exactly a make function, this vim macro is useful. It takes a -# verbatim sed script and converts each line to something suitable in a command -# context. Just paste the script's contents into the editor, yank this into a -# register (starting at '0') and run the macro once for each line of the -# original script: -# -# 0i -e :s/\$/$$/eg
:s/'/'"'"'/eg
^Ela'A' \:noh
j - -# 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,:) - -# $(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))) - -# 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 $1,$(RM) $1,:) - -# Create an identifier from a file name -# $(call cleanse-filename,filename) -cleanse-filename = $(subst .,_,$(subst /,__,$1)) - -# Escape dots -# $(call escape-dots,str) -escape-dots = $(subst .,\\.,$1) - -# Test that a file exists -# $(call test-exists,file) -test-exists = [ -e '$1' ] - -# 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 - -ifdef NO_COLOR -tput = -else -tput = $(shell $(TPUT) $1) -endif - -black := $(call tput,setaf 0) -red := $(call tput,setaf 1) -green := $(call tput,setaf 2) -yellow := $(call tput,setaf 3) -blue := $(call tput,setaf 4) -magenta := $(call tput,setaf 5) -cyan := $(call tput,setaf 6) -white := $(call tput,setaf 7) -bold := $(call tput,bold) -uline := $(call tput,smul) -reset := $(call tput,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 ?= blue -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 - -# Files of interest -all_files.tex ?= $(wildcard *.tex) -all_files.tex.sh ?= $(wildcard *.tex.sh) -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.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 := $(filter-out %._gray_.tex,$(call filter-buildable,tex)) -files.tex.sh := $(call filter-buildable,tex.sh) -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.eps.gz := $(call filter-buildable,eps.gz) - -# 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)) -.SECONDARY: $(patsubst %.fig,%._gray_.pstex,$(files.fig)) - -# Top level sources that are built by default targets -default_files.tex := $(filter-out %._gray_.tex,$(call filter-default,tex)) -default_files.tex.sh := $(call filter-default,tex.sh) -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.eps.gz := $(call filter-default,eps.gz) - -# 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 rst,all) -all_files_graphics := $(call concat-files,fig gpi eps.gz xvg svg png dot,all) - -default_files_source := $(call concat-files,tex,default) -default_files_scripts := $(call concat-files,tex.sh rst,default) -default_files_graphics := $(call concat-files,fig gpi eps.gz xvg svg png dot,default) - -files_source := $(call concat-files,tex) -files_scripts := $(call concat-files,tex.sh rst) -files_graphics := $(call concat-files,fig gpi eps.gz xvg svg png dot) - -# 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.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.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.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.eps.gz := $(call get-stems,eps.gz,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.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.eps.gz := $(call get-stems,eps.gz) - -# Utility function for creating larger lists of stems -# $(call concat-stems,suffixes,[prefix]) -concat-stems = $(sort $(foreach s,$1,$($(if $2,$2_,)stems.$s))) - -all_stems_source := $(call concat-stems,tex,all) -all_stems_script := $(call concat-stems,tex.sh rst,all) -all_stems_graphic := $(call concat-stems,fig gpi eps.gz xvg svg png dot,all) -all_stems_gray_graphic := $(addsuffix ._gray_,\ - $(all_stems_graphic) $(all_stems.eps) \ - ) -all_stems_gg := $(sort \ - $(all_stems_graphic) $(all_stems_gray_graphic)) -all_stems_ss := $(sort $(all_stems_source) $(all_stems_script)) -all_stems_gray := $(addsuffix ._gray_,$(all_stems_ss)) -all_stems_sg := $(sort $(all_stems_script) $(all_stems_gray)) -all_stems_ssg := $(sort $(all_stems_ss) $(all_stems_gray)) - -default_stems_source := $(call concat-stems,tex,default) -default_stems_script := $(call concat-stems,tex.sh rst,default) -default_stems_graphic := $(call concat-stems,fig gpi eps.gz xvg svg png dot,default) -default_stems_gray_graphic := $(addsuffix ._gray_,$(default_stems_graphic)) -default_stems_gg := $(sort \ - $(default_stems_graphic) $(default_stems_gray_graphic)) -default_stems_ss := $(sort \ - $(default_stems_source) $(default_stems_script)) -default_stems_gray := $(addsuffix ._gray_,$(default_stems_ss)) -default_stems_sg := $(sort $(default_stems_script) $(default_stems_gray)) -default_stems_ssg := $(sort $(default_stems_ss) $(default_stems_gray)) - -stems_source := $(call concat-stems,tex) -stems_script := $(call concat-stems,tex.sh rst) -stems_graphic := $(call concat-stems,fig gpi eps.gz xvg svg png dot) -stems_gray_graphic := $(addsuffix ._gray_,\ - $(stems_graphic) $(all_stems.eps)) -stems_gg := $(sort $(stems_graphic) $(stems_gray_graphic)) -stems_ss := $(sort $(stems_source) $(stems_script)) -stems_gray := $(addsuffix ._gray_,$(stems_ss)) -stems_sg := $(sort $(stems_script) $(stems_gray)) -stems_ssg := $(sort $(stems_ss) $(stems_gray)) - -# 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 \ - bbl \ - aux \ - aux.make \ - d \ - tex \ - auxbbl.make \ - _graphics \ - _show -allowed_source_patterns := $(addprefix %.,$(allowed_source_suffixes)) - -allowed_graphic_suffixes := \ - 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 \ - show - -# All targets that build multiple graphics (independent of document) -allowed_batch_graphic_targets := \ - all-graphics \ - all-pstex \ - all-dot2tex \ - all-gray-pstex \ - 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,%.eps,\ - $(filter $(patsubst %.eps,%.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 .eps,$(stems_gg)) -all_pstex_targets := $(addsuffix .pstex_t,$(stems.fig)) -all_gray_pstex_targets := $(addsuffix ._gray_.pstex_t,$(stems.fig)) -all_dot2tex_targets := $(addsuffix .dot_t,$(stems.dot)) - -all_known_graphics := $(sort $(all_graphics_targets) $(wildcard *.eps)) - -default_pdf_targets := $(addsuffix .pdf,$(default_stems_ss)) -default_ps_targets := $(addsuffix .ps,$(default_stems_ss)) -default_dvi_targets := $(addsuffix .dvi,$(default_stems_ss)) - -# Extensions generated by LaTeX invocation that can be removed when complete -rm_ext := \ - log aux dvi ps pdf blg bbl out nav snm toc lof lot lol pfg fls vrb \ - idx ind ilg lox -backup_patterns := *~ *.bak *.backup - -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. -# -# NOTE: BSD sed does not understand \|, so we have to do something more -# clunky to extract suitable extensions. -# -# $(call get-inputs,<parsed file>,<target files>) -define get-inputs -$(SED) \ --e '/^INPUT/!d' \ --e 's!^INPUT \(\./\)\{0,1\}!$2: !' \ --e '/\.tex$$/p' \ --e '/\.cls$$/p' \ --e '/\.sty$$/p' \ --e '/\.pstex_t$$/p' \ --e '/\.dot_t$$/p' \ --e 'd' \ -$1 | $(SORT) | $(UNIQ) -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. -# -# $(call get-graphics,<parsed file>,<target files>) -define get-graphics -$(SED) \ --e '/^File:/!d' \ --e 'N' \ --e 's/\n//g' \ --e '/Graphic file/!d' \ --e 's/^File: //' \ --e 's/ Graphic.*$$//' \ --e '/^\(.*\)\(\.[^.]*\)$$/{' \ --e 's//$2: \1\2/' \ --e 'p' \ --e 's/[^:]*: \(.*\)\(\.[^.]*\)$$/-include \1.gpi.d/' \ --e 'p' \ --e 'd' \ --e '}' \ -$1 | $(SORT) | $(UNIQ) -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 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 - -# Outputs all index files to stdout. Arg 1 is the source stem, arg 2 is the -# list of targets for the discovered dependency. -# -# $(call get-inds,<parsed file>,<target files>) -define get-inds -$(SED) \ --e 's/^No file \(.*\)\.ind\.$$/$2: \1.ind/p' \ --e 'd' \ -$1 | $(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. This produces a list of space-delimited .bib -# filenames, which is what the make dep file expects to see. -# -# $(call get-bibs,<aux file>,<targets>) -define get-bibs -$(SED) \ --e '/^\\bibdata/!d' \ --e 's/\\bibdata{\([^}]*\)}/\1,/' \ --e 's/,\{2,\}/,/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 dvi in it -# $(call make-auxdvi-file,<flattened-aux>,<new-aux>) -define make-auxdvi-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=%).,eps 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!.*!$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. -# -# $(call colorize-latex-errors,<log file>) -define colorize-latex-errors -$(SED) \ --e '/^! LaTeX Error: File .*eps'"'"' not found\.$$/d' \ --e '/^! LaTeX Error: Cannot determine size/d' \ --e '/^! /,/^$$/{' \ --e ' H' \ --e ' /^$$/{' \ --e ' x' \ --e ' s/^.*$$/$(C_ERROR)&$(C_RESET)/' \ --e ' p' \ --e ' }' \ --e '}' \ --e 'd' \ -$1 -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 GNUplot errors -# -# $(call colorize-gnuplot-errors,<log file>) -define colorize-gnuplot-errors -$(SED) \ --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 '/^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 -ps2pdf_normal := $(PS2PDF_NORMAL) -ps2pdf_embedded := \ - $(PS2PDF_EMBED) \ - -dPDFSETTINGS=/printer \ - -dEmbedAllFonts=true \ - -dSubsetFonts=true \ - -dMaxSubsetPct=100 - -# Colorize LaTeX output. -# This uses a neat trick from the Sed & Awk Book from O'Reilly: -# 1) Ensure that the last line of the file gets appended to the hold buffer, -# and blank it out to trigger end-of-paragraph logic below. -# 2) When encountering a blank line (LaTeX output helpfully breaks output on -# newlines) -# a) swap the hold buffer (containing the paragraph) into the pattern buffer (putting a blank line into the hold buffer), -# b) remove the newline at the beginning (don't ask), -# c) apply any colorizing substitutions necessary to ensure happiness. -# d) get the newline out of the hold buffer and append it -# e) profit! (print) -# 3) Anything not colorized is deleted, unless in verbose mode. -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/{' \ - -e ' s/.*(\([^)]\{1,\}\)).*/Success! Wrote \1/' \ - -e ' s/[[:digit:]]\{1,\}/$(C_PAGES)&$(C_RESET)/g' \ - -e ' s/Success!/$(C_SUCCESS)&$(C_RESET)/g' \ - -e ' b end' \ - -e ' }' \ - -e ' /^! *LaTeX Error:.*/{' \ - -e ' s//$(C_ERROR)&$(C_RESET)/' \ - -e ' b end' \ - -e ' }' \ - -e ' /^.*Warning:.*/{' \ - -e ' s//$(C_WARNING)&$(C_RESET)/' \ - -e ' b end' \ - -e ' }' \ - -e ' /^Underfull.*/{' \ - -e ' s//$(C_UNDERFULL)&$(C_RESET)/' \ - -e ' b end' \ - -e ' }' \ - -e ' /^Overfull.*/{' \ - -e ' s//$(C_OVERFULL)&$(C_RESET)/' \ - -e ' b end' \ - -e ' }' \ - $(if $(VERBOSE),,-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)/' \ - $(if $(VERBOSE),,-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 dvi target 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-dots,$1)\.aux\./d' \ -$1.log \ -| $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.|LaTeX Warning: File.*)$$' -endef - -# LaTeX invocations -# -# $(call latex,<tex file>,[<extra LaTeX args>]) -run-latex = $(LATEX) --interaction=batchmode $(if $2,$2,) $1 > /dev/null - -# $(call latex-color-log,<LaTeX stem>) -latex-color-log = $(color_tex) $1.log - -# $(call run-makeindex,<tex stem>) -define run-makeindex -success=1; \ -if ! $(MAKEINDEX) -q $1.idx > /dev/null || $(EGREP) -q '^!!' $1.ilg; then \ - $(call colorize-makeindex-errors,$1.ilg); \ - success=0; \ -fi; \ -[ "$$success" = "1" ] && $(sh_true) || $(sh_false); -endef - -# BibTeX invocations -# -# $(call run-bibtex,<tex stem>) -run-bibtex = $(BIBTEX) $1 | $(color_bib) - - -# $(call convert-gpi,<gpi file>,<eps file>,[gray]) -define convert-gpi -$(ECHO) 'set terminal postscript enhanced eps' \ -$(call get-default,$(strip \ -$(firstword \ - $(shell \ - $(SED) \ - -e 's/^\#\#FONTSIZE=\([[:digit:]]\{1,\}\)/\1/p' \ - -e 'd' \ - $1 $(strip $(gpi_global)) \ - ) \ -) \ -),22) \ -$(strip $(if $3,monochrome,$(if \ -$(shell $(EGREP) '^\#\#[[:space:]]*GRAY[[:space:]]*$$' $< $(gpi_global)),\ -,color))) > $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; \ -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 .fig files -# $(call convert-fig,<fig file>,<eps file>,[gray]) -convert-fig = $(FIG2DEV) -L 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' - -# Creation of .tex files from .rst files -# TODO: Fix paper size so that it can be specified in the file itself -# $(call convert-rst,<rst file>,<tex file>) -rst_style_file=$(wildcard _rststyle_._include_.tex) -define convert-rst -$(RST2LATEX) \ - --documentoptions=letterpaper \ - $(if $(rst_style_file),--stylesheet=$(rst_style_file),) \ - $1 $2 -endef - -# Converts svg files into .eps files -# -# $(call convert-svg,<svg file>,<eps file>,[gray]) -convert-svg = $(INKSCAPE) --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 EPS $(if $3,| $(call kill-ps-color)) > '$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) -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 = \ - $(if $(filter 1,$(shell $(CAT) '$4')),\ - $(ps2pdf_embedded),\ - $(ps2pdf_normal)) '$1' '$2' > $3 2>&1 - -# Display information about what is being done -# $(call echo-build,<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) ; - -.PHONY: all-ps -all-ps: $(default_ps_targets) ; - -.PHONY: all-dvi -all-dvi: $(default_dvi_targets) ; - -# -# 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)) - -# 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 -# - -%: %.pdf ; - -# This builds and displays the wanted file. -.PHONY: $(addsuffix ._show,$(stems_ssg)) -%._show: %.pdf - $(QUIET)$(VIEW_PDF) $< & - -.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 - -# Build the final dvi 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 .auxdvi.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 .auxdvi.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 .auxdvi.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 .dvi 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. -# -.SECONDARY: $(all_dvi_targets) -%.dvi: %.bbl %.aux - $(QUIET)\ - fatal=`$(call colorize-latex-errors,$*.log)`; \ - if [ x"$$fatal" != x"" ]; then \ - $(ECHO) "$$fatal"; \ - exit 1; \ - fi; \ - $(call make-auxdvi-file,$*.aux.make,$*.auxdvi.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,$*.auxdvi.cookie,$*.auxdvi.make);\ - then \ - run=1; \ - break; \ - fi; \ - if $(call test-log-for-need-to-run,$*); then \ - run=1; \ - break; \ - fi; \ - done; \ - $(call remove-temporary-files,$*.bbl.cookie $*.run.cookie); \ - $(MV) $*.auxdvi.cookie $*.auxdvi.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,$@,$$$$i),\ - $(call echo-build,$*.tex,$@,$$i)\ - ); \ - $(call run-latex,$*); \ - $(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 on the -# .dvi side. -%.bbl: %.auxbbl.make - $(QUIET)\ - $(if $(filter %.bib,$^),\ - $(call echo-build,$(filter %.bib,$?) $*.aux,$@); \ - $(call run-bibtex,$*); \ - $(TOUCH) $@.cookie; \ - ) - -# Create the index file -%.ind: %.idx %.tex - $(QUIET)$(call echo-build,$<,$@) - $(QUIET)$(call run-makeindex,$*) -# -# SCRIPTED LaTeX TARGETS -# -.SECONDARY: $(all_tex_targets) -%.tex: %.tex.sh - $(QUIET)$(call echo-build,$<,$@) - $(QUIET)$(SHELL) $< $@ - -%.tex: %.rst $(rst_style_file) - $(QUIET)$(call echo-build,$<,$@) - $(QUIET)$(call convert-rst,$<,$@) - -# -# GRAYSCALE LaTeX TARGETS -# - -# Parse %.d to get all of the include files, then run sed to generate new files -# for all of them that depend on _gray. -%._gray_.tex: %.d %.tex - $(QUIET)$(call echo-build,$^,$@) - $(QUIET)\ - texstems=`$(SED) \ - -e 's/[^:]*:[[:space:]]*\(.*\)\.tex[[:space:]]*$$/\\1/p' \ - -e 'd' \ - $<`; \ - for f in $$texstems; do \ - $(SED) \ - -e 's/\.eps/._gray_&/' \ - -e 's/\.pstex/._gray_&/' \ - -e 's/\.pstex_t/._gray_&/' \ - -e 's/_include_/&._gray_/g' \ - $$f.tex > $$f._gray_.tex; \ - done; - -# -# GRAPHICS TARGETS -# -.PHONY: all-graphics -all-graphics: $(all_graphics_targets); - -.PHONY: all-pstex all-gray-pstex -all-pstex: $(all_pstex_targets); -all-gray-pstex: $(all_gray_pstex_targets); - -.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,$@) - -%._gray_.eps: %.gpi $(gpi_sed) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-gpi,$<,$@,1) - -%._gray_.eps: %.fig - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-fig,$<,$@,1) - -%._gray_.eps: %.dot $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-dot,$<,$@,$<.log,1) - -%._gray_.eps: %.xvg $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-xvg,$<,$@,1) - -%._gray_.eps: %.svg $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-svg,$<,$@,1) - -%._gray_.eps: %.png $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-png,$<,$@,1) - -%._gray_.eps: %.eps.gz $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-epsgz,$<,$@,1) - -%._gray_.eps: %.eps $(gray_eps_file) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-eps,$<,$@,1) - -%._gray_.pstex: %.fig - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-fig-pstex,$<,$@,1) - -%._gray_.pstex_t: %.fig %._gray_.pstex - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-fig-pstex-t,$<,$@,$*._gray_.pstex,1) - -%.eps: %.gpi $(gpi_sed) - $(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)) - -%.eps: %.svg $(if $(GRAY),$(gray_eps_file)) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-svg,$<,$@,$(GRAY)) - -%.eps: %.png $(if $(GRAY),$(gray_eps_file)) - $(QUIET)$(call echo-graphic,$^,$@) - $(QUIET)$(call convert-png,$<,$@,$(GRAY)) - -%.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 file. 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 -# %.dvi.1st.make (the .dvi file, moved) -# -# Steps: -# -# Run latex -# Move .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. -# -%.d %.aux %.aux.make: %.tex - $(QUIET)$(call echo-build,$<,$*.d $*.dvi,1) - $(QUIET)\ - $(call run-latex,$<,--recorder) || $(sh_true); \ - $(call die-on-pstexs,$*.log); \ - $(call die-on-dot2tex,$*.log); \ - $(MV) $*.dvi $*.dvi.1st.make; \ - $(call flatten-aux,$*.aux,$*.aux.make); \ - $(ECHO) "# vim: ft=make" > $*.d; \ - $(ECHO) ".PHONY: $*._graphics" >> $*.d; \ - $(call get-inputs,$*.fls,$(addprefix $*.,aux aux.make d dvi)) >> $*.d; \ - $(call get-graphics,$*.log,$(addprefix $*.,d dvi _graphics)) >> $*.d; \ - $(call get-inds,$*.log,$(addprefix $*.,d aux aux.make)) >> $*.d; \ - $(call get-bibs,$*.aux.make,$(addprefix $*.,bbl aux aux.make)) >> $*.d; \ - for s in toc out lot lof lol nav; do \ - if [ -e "$*.$$s" ]; then \ - if ! $(DIFF) -q $*.$$s $*.$$s.make 2>/dev/null; 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. -%._gray_.gpi.d: %.gpi - $(QUIET)$(call echo-build,$<,$@) - $(QUIET)$(call make-gpi-d,$<,$@) - -%.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) \ - $(ECHO) hi; \ - 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 $(all_stems))) - -.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: _graphic_sources -_graphic_sources: - $(QUIET)$(ECHO) "== Graphic Sources ==" - $(QUIET)$(call echo-list,$(sort $(files_graphics))) - -.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 -# -.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-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)"; \ - $(ECHO); \ - $(ECHO) 'SVN info: $(svninfo)'; - -# -# 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. -# -# There is another facility for creating grayscale documents that is -# better when you can use it (it has some small limitations not shared -# by this approach). See the section on %._gray_ targets below. -# -# 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 -# -# STANDARD AUXILIARY FILES: -# -# Makefile.ini -# -# 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 -# PS2PDF_EMBED := ps2pdf14 -# 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), and ps2pdf14 as the proper ps to pdf conversion -# program for embedded fonts. 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. -# -# Also, you can put arbitrary targets into it if, for example, you -# want your source built from something else, e.g.: -# -# generated.tex: generating_script.weird_lang depA depB -# ./generating_script.weird_lang > $$@ -# -# The Makefile.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. -# -# 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: -# Build all fig files into pstex and pstex_t files. Gray DOES NOT WORK. -# -# all-gray-pstex: -# 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_sources: -# A list of all files that can create .eps files -# -# _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. This is -# done using dvips and ps2pdf. Some may object to this idea, -# saying that pdflatex is a better approach, but I disagree for -# two major reasons: -# -# * Postscript can be a very nice thing to have directly from the LaTeX -# file, especially when printing. -# -# * One word: psfrag. If you don't know this wonderful package, get to -# know it. It is a workhorse for making graphs pretty. -# -# %._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 %.dvi -# depends. -# -# %.ps: -# 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: -# Build the DVI file from the corresponding %.tex file. -# -# %.ind: -# Build the index 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) -# .eps.gz : gzipped eps -# -# The behavior of this makefile with each type is described in -# its own section below. -# -# %.pstex{,_t}: -# Build a .pstex_t file from a .fig file. -# -# All targets have a corresponding %._gray_.suffix form, which creates -# everything in monochrome. This is useful for creating both color and -# grayscale versions of the same document, and they can coexist happily in -# the same directory. Examples: -# -# make test._gray_._graphics # Build all grayscale graphics -# make test._gray_ # Build a grayscale document -# -# The use of a ._gray_ target creates ._gray_.tex files (not forgetting the -# included files!) with appropriate dependencies on ._gray_.eps graphics. -# This approach is in many ways superior to specifying GRAY=1 on the command -# line, but has some limitations. Because a new .tex file must be created, -# this means that the original .tex file must be parsed and all references -# to graphics and include files must be transformed. This can be a brittle -# operation in a macro-based language like LaTeX, since it is very easy to -# define macros that call \include or \input indirectly. -# -# Here the naming strategy for include files comes into play. They all have -# ._include_. in their name, and are therefore fairly easy to search out. -# That sequence is unlikely to appear in text, so it is fairly safe to -# replace it. Anything ending in .eps is also replaced to end with -# ._gray_.eps, and is subject to the same issues. -# -# In short, if your file contains _include_ when not referencing a file, or -# it says .eps when not referencing a graphic, this approach is probably not -# for you. I imagine that these cases are fairly rare, however, so it -# should work most of the time. When a doubt arises, you can be sure that -# GRAY=1 will do the right thing, provided you precede it with a 'make -# clean'. -# -# 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 .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 -# -# Calls the script using sh, assuming that its output is a .tex -# file. Of course, your .sh file can call another script to do -# its work. Go wild! -# -# 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. -# -# This approach does not work for included .tex files. If you -# want to do something special with those, you should wrap all of -# that functionality into a top-level source script that creates -# the necessary includes as well. -# -# 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. -# -# 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 -# 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: -# -# %%[[: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 document._gray_ -# or -# 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, like 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"] -# 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 -> 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"] -# 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 such *.ind"] -# 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 -# vim: noet sts=0 sw=8 ts=8 diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps-bib.bib b/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps-bib.bib deleted file mode 100644 index 5727411d9aa..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps-bib.bib +++ /dev/null @@ -1,18 +0,0 @@ -@misc{tugdodu, -author = {Wegners, Erik}, -title = {{Dashed or dotted underline}}, -year = 2009, -note = {{\url{http://ewus.de/tipp-1014.html}}}, -} -@misc{mathematex, -author = {Mathematex}, -title = {{Souligner un phantom en pointill\'es avec retour \`a la ligne : LaTeX}}, -year = 2009, -note = {{\url{http://forum.mathematex.net/latex-f6/souligner-un-phantom-en-pointilles-avec-retour-a-la-ligne-t10057.html}}}, -} -@misc{gdttdu, -author = {Deschrijver, Glad}, -title = {{\TeX{} Tricks -- Dashed underline}}, -note = {\url{http://users.ugent.be/~gdschrij/LaTeX/textricks.html#dashedul}}, -year = 2011, -}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.forlisting b/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.forlisting deleted file mode 100644 index 92c64411bc9..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.forlisting +++ /dev/null @@ -1,79 +0,0 @@ -%% This is file `dashundergaps.sty' v1.2 by Merciadri Luca. - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{dashundergaps}[2010/01/20 Dashing and underlining (phantom) text] -\PackageInfo{dashundergaps}{This is DashUnderGaps by Merciadri Luca.} - -\RequirePackage{ifthen}[1994/06/01] -\PassOptionsToPackage{normalem}{ulem} -\RequirePackage{ulem} -\newboolean{dot} % false at start -\newboolean{dash} % false at start - - -\DeclareOption{dash}{% -\typeout{Dashing mode activated!} -\setboolean{dash}{true} -\providecommand{\dashuline}{\bgroup -\ifdim\ULdepth=\maxdimen -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\kern.15em -\vtop{\kern\ULdepth \hrule width .3em}% -\kern.15em}\ULon} -} - - -\DeclareOption{dot}{% -\typeout{Dotting mode activated!} -\setboolean{dot}{true} -\providecommand{\dotuline}{\bgroup -\ifdim\ULdepth=\maxdimen -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\begingroup -\advance\ULdepth0.08ex -\lower\ULdepth\hbox{\kern.15em .\kern.1em}% -\endgroup}\ULon} -} - - -\DeclareOption{phantomtext}{% -\typeout{Phantom mode activated! All the gaps will be filled.} -\newboolean{teachernotes} % false at start -\newcounter{nb-gaps} -\setcounter{nb-gaps}{1} -\newcounter{nth-gaps} -\setcounter{nth-gaps}{1} - -\def\phantom@putbox{\ifx\UL@start\@empty \else % not inner - \vrule\@width\z@ \LA@penalty\@M - {\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}% - \hbox to\wd\UL@box{}\fi}% - -\providecommand{\gap}[1]{% -\bgroup -\let\UL@putbox=\phantom@putbox -\ifthenelse{\boolean{teachernotes}} -{\textbf{#1} (\arabic{nth-gaps})} -{\ifthenelse{\boolean{dash} \AND \boolean{dot}}{\uline{#1}(\arabic{nth-gaps})}{\ifthenelse{\boolean{dash}}{\dashuline{#1} (\arabic{nth-gaps})}{% -\ifthenelse{\boolean{dot}}{\dotuline{#1} (\arabic{nth-gaps})}{\uline{#1} (\arabic{nth-gaps})}}} -} -\addtocounter{nb-gaps}{1} -\addtocounter{nth-gaps}{1} -\egroup -}} - - -\DeclareOption{teachernotes}{% -\typeout{Phantom mode deactivated! All the gaps will be filled with their content.} -\setboolean{teachernotes}{true} -} - - -\DeclareOption{displaynbgaps}{% -\typeout{Gaps counting mode activated!} -\addtocounter{nb-gaps}{-1} -\AtEndDocument{\vfill \centering \bfseries GAPS: \arabic{nb-gaps}.} -} - -\ProcessOptions\relax - diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.tex b/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.tex deleted file mode 100644 index bbc8b53e72d..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/dashundergaps.tex +++ /dev/null @@ -1,353 +0,0 @@ -\documentclass[10pt,a4paper,final,makeidx,twosides]{article} - - -\usepackage{tabularx} -\usepackage{ulem} -\usepackage{boxedminipage} - -\usepackage{listings} - -\usepackage{caption} -%\captionsetup{figurename=Figure, tablename=Table} - -\renewcommand{\captionfont}{\small} -\renewcommand{\captionlabelfont}{\bfseries} - -\usepackage[protrusion=true,draft=false,final,verbose=true,babel=true]{microtype} - - -\def\dashuline{\bgroup -\ifdim\ULdepth=\maxdimen % Set depth based on font, if not set already -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\kern.15em -\vtop{\kern\ULdepth \hrule width .3em}% -\kern.15em}\ULon} - -\def\dotuline{\bgroup -\ifdim\ULdepth=\maxdimen % Set depth based on font, if not set already -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\begingroup -\advance\ULdepth0.08ex -\lower\ULdepth\hbox{\kern.15em .\kern.1em}% -\endgroup}\ULon} - -\makeatletter -\newcommand{\ack}[1]{\let\save@makefntext\@makefntext% -\def\@makefntext##1{\parindent0em##1}\footnotetext{#1}% -\let\@makefntext\save@makefntext} -\makeatother - -\title{The \textbf{dashundergaps} package} -\author{Merciadri Luca} -\date{\today} - -\usepackage{makeidx} - -%% - HYPERREF PACKAGE - ** MUST be LAST ONE ** -\usepackage[a4paper,bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,breaklinks=true,colorlinks=true,final,menucolor=red,pdfauthor={Merciadri Luca},pdfcreator={Merciadri Luca},pdfkeywords={math},pdftitle={The dashundergaps package},pdfsubject={(La)TeX},pdftoolbar=true]{hyperref} -\hypersetup{urlcolor=red,linkcolor=blue,citecolor=blue,colorlinks=true} - -\usepackage{breakurl} - - -%% -- INDEX GENERATION ACTIVATION -- - -\makeindex - -%% -- INDEX GENERATION ACTIVATION -- - -\begin{document} - - -\maketitle - -\tableofcontents - -\newpage -\section{Introduction} -This package (\verb v1.2 ) \textit{helps you to} use (a) pattern(s) from this list: -\begin{enumerate} -\item \dashuline{dashing}; -\item \dotuline{dotting}; -\item \underline{underlining} -\end{enumerate} -for a word which can be either -\begin{enumerate} -\item hidden; -\item or not. -\end{enumerate} - -This can be \textit{useful in} these situations: -\begin{enumerate} -\item You are writing a document for which you need to dash or (and) to dot text, -\item You want to write a test for which students have to ``fill in the gaps,'' and you want to choose when to print the answers. -\end{enumerate} - -\section{Use} -\subsection{Loading the Package} -To \textit{load the package}, please use -\begin{center} -\begin{verbatim} -\usepackage[options]{dashundergaps} -\end{verbatim} -\end{center} -\subsection{Available Options} -Without any option, the package will not be really useful, as it will not perform anything that will be nice for you. Consequently, the \textit{following options are available}: -\begin{itemize} -\item \verb dash : will dash \dashuline{text} if used with the command\index{\texttt{dash}} -\begin{verbatim} -\dashuline{text} -\end{verbatim} -where you want ``text'' to be dashed (\textit{i.e.} somewhere in the \verb document ~environment), -\item \verb dot : will dot \dotuline{text} if used with the command\index{\texttt{dot}} -\begin{verbatim} -\dotuline{text} -\end{verbatim} -where you want ``text'' to be dotted (\textit{i.e.} somewhere in the \verb document ~environment), -\item \verb phantomtext : will help you to write a pattern at the place of the text. This pattern can be\index{\texttt{phantomtext}} -\begin{itemize} -\item dashing, if used with \verb dash ~option; -\item dotting, if used with \verb dot ~option; -\item underlining, if used with (\verb dash ~\textit{and} \verb dot ) options \textit{or} with neither \verb dash ~nor \verb dot ; -\item the text in itself, if used with \verb teachernotes ~option. -\end{itemize} -\item \verb teachernotes : see the last point of \verb phantomtext ,\index{\texttt{teachernotes}} -\item \verb displaynbgaps : will produce, at the end of your document (and in the center of the page), a summary of the number of gaps like\index{\texttt{displaynbgaps}} -\begin{center} -\textbf{GAPS: $x$.} -\end{center} -\end{itemize} - -\newpage -\section{Possible Combinations} -All the possible sensed commands (the launching order has no importance) of \verb dashundergaps.sty ~are given at Table \ref{tab:exuse} \textit{except} the use of \verb displaynbgaps , which can trivially be used iff \verb phantomtext ~is used. Here, ``$\times$'' is equivalent to the well-known ``N.A.'' and thus means ``Not Applicable.'' Notice that gaps are automatically numbered. - -\begin{table}[!h] -\begin{center} -\begin{tabular}{cccc} -\hline -\hline -\hline -\textbf{Option(s)} & \multicolumn{3}{c}{\textbf{Consequence}}\\ -\hline - & \texttt{\textbackslash gap\{text\}} & \texttt{\textbackslash dashuline\{text\}} & \texttt{\textbackslash dotuline\{text\}}\\ -\hline -\hline -\texttt{dash} (only) & $\times$ & \dashuline{text} & $\times$\\ -\hline -\texttt{dot} (only) & $\times$ & $\times$ & \dotuline{text}\\ -\hline -\texttt{dash}, \texttt{dot} & $\times$ & \dashuline{text} & \dotuline{text}\\ -\hline -\hline -\texttt{phantomtext} (only) & \underline{\phantom{text}} (1) & $\times$ & $\times$\\ -\hline -\texttt{phantomtext}, \texttt{dash} & \dashuline{\phantom{text}} (1) & \dashuline{text} & $\times$\\ -\hline -\texttt{phantomtext}, \texttt{dot} & \dotuline{\phantom{text}} (1) & $\times$ & \dotuline{text}\\ -\hline -\texttt{phantomtext}, \texttt{dash}, \texttt{dot} & \underline{\phantom{text}} (1) & \dashuline{text} & \dotuline{text}\\ -\hline -\texttt{phantomtext}, \texttt{teachernotes} & \textbf{text} & $\times$ & $\times$\\ -\hline -\texttt{phantomtext}, \texttt{dash}, \texttt{teachernotes} & \textbf{text} & \dashuline{text} & $\times$\\ -\hline -\texttt{phantomtext}, \texttt{dot}, \texttt{teachernotes} & \textbf{text} & $\times$ & \dotuline{text}\\ -\hline -\texttt{phantomtext}, \texttt{dash}, \texttt{dot}, \texttt{teachernotes} & \textbf{text} & \dashuline{text} & \dotuline{text}\\ -\hline -\hline -\hline -\end{tabular} -\caption{Possible sensed commands of this package except \texttt{displaynbgaps}.} -\label{tab:exuse} -\end{center} -\index{\texttt{dot}} -\index{\texttt{teachernotes}} -\index{\texttt{dash}} -\index{\texttt{displaynbgaps}} -\index{\texttt{phantomtext}} -\end{table} - -\section{Examples} -From now on, the output of the listed codes will be put in rectangular boxes. - -\subsection{Dashing} -Here is an \textit{example} of \textit{sentence dashing}. -\begin{verbatim} -\documentclass[10pt]{article} - -\usepackage[dash]{dashundergaps} - -\begin{document} -\dashuline{This is a dashed sentence} -\end{document} -\end{verbatim} -gives -\begin{center} -\begin{boxedminipage}{\textwidth} -\dashuline{This is a dashed sentence} -\end{boxedminipage} -\end{center} -Dotting is done in the same way. - -\newpage -\subsection{Gaps with Dots -- Student Version} -Here is an \textit{example} of \textit{dotted gaps} for the student version. -\begin{verbatim} -\documentclass[10pt]{article} - -\usepackage[dot, phantomtext]{dashundergaps} - -\begin{document} -In Computer Science, ``PC'' means ``Personal \gap{Computer}.'' - -We can still \dotuline{dot this}. -\end{document} -\end{verbatim} -results in -\begin{center} -\begin{boxedminipage}{\textwidth} -In Computer Science, ``PC'' means ``Personal \dotuline{\phantom{Computer}} (1).'' - -We can still \dotuline{dot this}. -\end{boxedminipage} -\end{center} - -\subsection{With Tabular} -To produce -\begin{center} -\begin{boxedminipage}{\textwidth} -\begin{tabular}{lll} -\hline -Head A & Head B & Head C\\ -\multicolumn{2}{l}{\dotuline{\hfill}}\\ -Col 1 & Col 2 & Col 3\\ -Col 1 & Col 2 & Col 3\\ -\hline -\end{tabular} -\end{boxedminipage} -\end{center} -just use -\noindent -\begin{verbatim} - \begin{tabular}{lll} -\hline -Head A & Head B & Head C\\ -\multicolumn{2}{l}{\dotuline{\hfill}}\\ -Col 1 & Col 2 & Col 3\\ -Col 1 & Col 2 & Col 3\\ -\hline -\end{tabular} -\end{verbatim} -where you want it to appear. - - -\newpage -\section{Implementation} -Here is the code of \verb dashundergaps.sty : -\lstset{language=TEX, basicstyle=\tiny, keywordstyle=\bfseries, commentstyle=\itshape, keywords={}, emph={}, emphstyle=\bfseries, numbers=left, stringstyle=\ttseries, showstringspaces=false, stepnumber=2, numbersep=5pt, showspaces=false, showtabs=false, backgroundcolor=\color{white}} - -%\begin{lstlisting}[frame=single] -\lstinputlisting[lastline=80]{dashundergaps.forlisting} -%\end{lstlisting} - - -\section{Limitations} -This package is currently not able to cope with strange users such as the ones which would -\begin{itemize} -\item Like to use both \verb \dashuline{text} ~\textit{and} \verb \dotuline{text} ~\textit{and} would like \verb \gap{text} ~to appear either as \verb \dotuline{\phantom{text}} ~or as \verb \dashuline{\phantom{text}} . This is not implemented as this would be a really unuseful feature: there are not many folks who want their \verb \gap{text} ~to be filled with something else than \begin{center}\begin{verbatim}\underline{\phantom{text}}\end{verbatim}\end{center} when already using \verb \dashuline ~or \verb \dotuline ~in the text! -\end{itemize} - -\section{Remarks} -\subsection{Dashing and Dotting Hierarchy} -\subsubsection{Numbering} -Some users would like to use a code like this: -\scriptsize -\begin{verbatim} -... -\usepackage[dash,dot]{dashundergaps} -... -\usepackage[calcwidth,pagestyles,raggedright,bf,sf,...]{titlesec} -\titleformat{\section}{\normalfont\Huge\bfseries}{\dashuline{\thesection}}{1em}{} -\titleformat{\subsection}{\normalfont\LARGE\bfseries}{\dotuline{\thesubsection}}{1em}{} -\titleformat{\subsubsection}{\normalfont\Large\bfseries}{\thesubsubsection}{1em}{} -\titleformat{\paragraph}[runin]{\normalfont\large\bfseries\itshape}{\theparagraph}{1em}{} -\titleformat{\subparagraph}[runin]{\normalfont\normalsize\bfseries\itshape}{\thesubparagraph}{1em}{} -... -\end{verbatim} -\normalsize -It is possible, and will work. For example, here, sections and subsections will have their numbering respectively dashed and dotted. - -\subsubsection{Titles} -You cannot modify -\scriptsize -\begin{verbatim} -... -\usepackage[dash,dot]{dashundergaps} -... -\usepackage[calcwidth,pagestyles,raggedright,bf,sf,...]{titlesec} -\titleformat{\section}{\normalfont\Huge\bfseries}{\thesection}{1em}{} -\titleformat{\subsection}{\normalfont\LARGE\bfseries}{\thesubsection}{1em}{} -\titleformat{\subsubsection}{\normalfont\Large\bfseries}{\thesubsubsection}{1em}{} -\titleformat{\paragraph}[runin]{\normalfont\large\bfseries\itshape}{\theparagraph}{1em}{} -\titleformat{\subparagraph}[runin]{\normalfont\normalsize\bfseries\itshape}{\thesubparagraph}{1em}{} -... -\end{verbatim} -\normalsize -to output the names of your sections, subsections, \ldots in a dashed or dotted fashion. For this, the temporary solution is to use, at each of the points of the hierarchy, a code like this (this is for \verb \section ): -\begin{verbatim} -\section{\protect\dashuline{This is the First Section}} -\end{verbatim} -Do not forget the \verb \protect ~please. It must be written because \verb \dashuline ~and \verb \dotuline ~were not declared as robust commands. - -\subsection{Ulem and the Emphasize Command} -\label{subsec:v11} -Donald Arseneau informed me in an e-mail that adding -\begin{verbatim} -\PassOptionsToPackage{normalem}{ulem} -\end{verbatim} -before -\begin{verbatim} -\RequirePackage{ulem} -\end{verbatim} -would be a good idea, since \verb \emph ~is equivalent to \verb \underline ~for \verb ulem ~when the \verb normalem ~option is not given to it. This has been modified, and is in \verb v1.1 . - -\section{Bugs} -[Chronologically ordered.] -\begin{enumerate} -\item (20/01/2010): Thanks to \cite{mathematex}, the first bug has been discovered: if the argument of \verb \gap ~was too long, and that \verb teachernotes ~was activated, the underlining was not done according to margins. It has now been solved. Many thanks to Donald Arseneau for this. \label{bug:20012010} -\end{enumerate} - -\section{Version History} -\begin{enumerate} - \item \verb v1.0 : package is introduced to the \LaTeX{} world, - \item \verb v1.1 : see \ref{subsec:v11}, - \item \verb v1.2 : fixed bug \ref{bug:20012010}, and the commands are now defined using \verb \providecommand . -\end{enumerate} - - -\section{Contact} -If you have any question concerning this package (limitations, bugs, \ldots), please contact me at \href{mailto:Luca.Merciadri@student.ulg.ac.be}{Luca.Merciadri@student.ulg.ac.be}. - -\section{Thanks} -Thanks to many users for feedback and to Glad Deschrijver \cite{gdttdu} for the \verb|\dotuline| and \verb|\dashuline| code. - -\newpage - -\phantomsection -\printindex - -\newpage -\pagenumbering{Roman} -\setcounter{page}{1} -\section{References} -\nocite{*} -\bibliographystyle{siam} -%\bibliographystyle{frplain} -%\bibliographystyle{alpha} -\label{biblio} -%\begin{multicols}{2} -\bibliography{dashundergaps-bib} - -\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/perso.ist b/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/perso.ist deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Master/texmf-dist/doc/latex/dashundergaps/doc/tex/perso.ist +++ /dev/null diff --git a/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.dtx b/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.dtx new file mode 100644 index 00000000000..cd0067807bf --- /dev/null +++ b/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.dtx @@ -0,0 +1,800 @@ +% \iffalse meta-comment +% +%% File: dashundergaps.dtx (C) Copyright 2018 Frank Mittelbach +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% https://www.latex-project.org/lppl.txt +% +% +% The development version of the bundle can be found below +% +% https://github.com/FrankMittelbach/fmitex/ +% +% for those people who are interested or want to report an issue. +% +%<*driver> +\documentclass{l3doc} +\usepackage{dashundergaps,multicol} +\EnableCrossrefs +\CodelineIndex +\begin{document} + \DocInput{dashundergaps.dtx} +\end{document} +%</driver> +% +% \fi +% +% +% \newcommand\option[1]{\texttt{#1}} +% +% \title{The \texttt{dashundergaps} package\thanks{A reimplementation of +% a package originally written by Luca Merciadri in 2010.}} +% \author{Frank Mittelbach} +% +% \maketitle +% +% \begin{abstract} +% The \pkg{dashundergaps} package offers the possibility to replace +% material in running text with white space in order to build up forms +% that can be filled in at a later time. +% +% By default the gaps are underlined and followed by a gap number in +% parentheses, but many other designs are possible, e.g., dashes or +% dots instead of the underline, no gap numbers or a different format +% for them, gap widening for easier fill-in, etc. +% +% There is also a teacher's mode which shows the normally hidden text +% in a special (customizable) format. +% \end{abstract} +% +% \section{Introduction} +% +% The \pkg{dashundergaps} package provides a single command \cs{gap} +% which takes its argument and produces a gap of a width matching its +% width. To better mark this gap it is underlined in some form (could be +% a solid line, a dashed or dotted line or even a \uwave{wriggling +% line}). Furthermore, each gap might be numbered to be able to easily +% refer to it. Here is an example in form of a puzzle: +% +% +% \newcommand\puzzletext{% +% \begin{quote} +% The initial `E.' in Donald E. Knuth's name stands for \gap*{Erwin}. +% The well-known answer to the Ultimate Question \gap{of Life, the +% Universe, and Everything} is 42 according to \gap{Douglas Adams}. +% The first edition of \gap{The \LaTeX{} Companion} celebrates silver +% anniversary in 2019. Historically speaking, \texttt{expl3} stands for +% \gap{\textbf{EX}perimental \textbf{P}rogramming \textbf{L}anguage +% \textbf{3}} even though it is a production language these days. +% \end{quote}} +% +% \dashundergapssetup{ +% ,gap-number-format = \,\textsuperscript{\normalfont(\thegapnumber)} +% ,gap-font = \itshape +% ,teacher-gap-format = underline +% ,gap-widen +% } +% +% \puzzletext +% And here are some hints for it if you want to fill it out: +% \begin{quote} +% \begin{multicols}{2} +% \begin{enumerate} +% \item If everything would be that easy to answer. +% \item The author of ``Last Chance To See'' and a famous +% radio~show. +% \item Back then known as the doggie book. +% \item Old names die hard.\\ +% \mbox{} % manual to get same height +% \end{enumerate} +% \end{multicols} +% \end{quote} +% The answer is given in Section~\ref{sec:answer} that shows the gaps +% filled in, which is due to a, so called, teacher mode that can be activated. +% +% As you see some gaps are numbered with a superscript number (not the +% default setting) while others aren't. How this is done and how to +% change the result is explained in the next section. +% +% There also exists a ``teacher mode'' in which the the gaps are filled +% with the text given in the argument. This can be used to show the +% correct answers of some test (as we do in Section~\ref{sec:answer}) or +% to give a sample fill-in for some form, to help people to fill it out +% correctly. The ``teacher mode'' will produce the same line breakings +% because ensures that the fill-ins take the same about of space as the +% gaps. +% +% Another important feature is the possibility to artificially widen the +% gaps (compared to the textual material in the argument). After all, +% when a form is filled by hand people typically need more space to +% write some text compared to the same text being typeset. So making the +% gaps simply as wide as the material may result in too little +% space. +% +% +% \section{The user interface} +% +% +% The \pkg{dashundergaps} package is built as a small application on top +% of the \pkg{ulem} package, a package that defines a number of commands for +% underling \meta{simple-text} in various ways. +% \begin{function}{\uline,\uwave,\dashuline,\dotuline} +% \begin{syntax} +% \cs{uline}\Arg{simple-text} \cs{uwave}\Arg{simple-text} % etc. +% \end{syntax} +% This means that by loading +% \pkg{dashundergaps} the \pkg{ulem} commands such as \cs{uline}, +% \cs{uwave} and so forth are automatically made available. +% These commands are used to do most of +% the work and the current package only makes sure that instead of the +% words empty boxes of the same width are are used by \pkg{ulem}. This +% way we get underlined gaps of the right size. +% +% \end{function} +% +% By default, \pkg{ulem} would change \cs{emph} to underline text, so +% for this application it is loaded with the option \texttt{normalem} to +% prevent that from happening. +% +% +% +% \begin{function}{\gap} +% \begin{syntax} +% \cs{gap}*\oarg{type}\Arg{text} +% \end{syntax} +% The main command provided by the package is \cs{gap} which expects a +% mandatory \meta{text} argument containing the material that is used +% to produce the gap (and normally invisible). By default the gap is +% underlined (though that could be changed). +% +% The optional \meta{style} argument explicitly defines a certain type +% of underlining: |u| stands for normal underlining (via \cs{uline}), +% |w| for a wave line (via \cs{uwave}), |b| for blank (i.e., no +% underlining whatsoever), ``|-|'' for a dash-line (via \cs{dashuline}) +% and finally ``|.|'' for underlining with dots (via \cs{dotuline}). +% +% By default gaps are numbered using the counter \texttt{gapnumber} +% and this number is shown in parentheses after the gap. With the star +% form the generation of the number can be toggled, i.e., if it is +% normally produced because of the current option settings it will be +% suppressed, if it is suppressed through an option it will be +% typeset. This way one can select the most convenient setting via an +% option for the whole document and use the |*| to toggle it +% occasionally. +% +% Since \cs{gap} uses \pkg{ulem} commands it inherits the limitations +% of these commands, in that only simple text can be used in the +% \meta{text} argument. For example, a \cs{footnote} couldn't be used +% in that place (but then that wouldn't make much sense in a gap, +% would it?). +% +% \end{function} +% +% \begin{function}{\TeacherModeOn,\TeacherModeOff} +% \begin{syntax} +% \cs{TeacherModeOn} \texttt{\% show gap material}\\ +% \cs{TeacherModeOff} \texttt{\% stop showing gap material} +% \end{syntax} +% There also exists a teacher mode in which the material for the gaps is +% visible. This can be used to show the expected answers in case \cs{gap} +% is used for preparing tests, or to show a sample fill-in of a form. +% The teacher mode can be turned on or off anywhere in the document +% using \cs{TeacherModeOn} or \cs{TeacherModeOff}, +% respectively. Alternatively, it can also be set via an option, as we +% will see below. +% \end{function} +% +% \begin{function}{\dashundergapssetup} +% \begin{syntax} +% \cs{dashundergapssetup}\Arg{key-value list} +% \end{syntax} +% The package can be loaded with a number of options (discussed in +% Section~\ref{sec:options}). A probably better approach is to set any +% options with the declaration \cs{dashundergapssetup} which is normally +% used in the preamble, but can in fact be used throughout the document +% to change settings on the fly. It only changes options explicitly +% given so can be used to overwrite some defaults but leave everything +% else unchanged. +% \end{function} +% +% +% +% +% +% +% +% +% \subsection{Options to customize the gap display}\label{sec:options} +% +% All of the package options are implemented as key/value options. In +% case of boolean options one can just give the option name as a short +% for setting the option to |true|. Most options can be used during +% package loading in the optional argument of \cs{usepackage}. However +% if the value requires some \LaTeX{} code (e.g., \option{gap-font} that +% expects a font declaration command) then this will not work due to +% some limitations in the current \LaTeX{} package loader. For such +% options use +% \cs{dashundergapssetup} instead which will always work. +% +% \subsubsection{Gap modus} +% +% The general processing mode is defined through the following options: +% \begin{description} +% \item[teacher-mode] Boolean that turns on teacher mode (i.e., the gap +% material will be come visible if set to |true|). It's default is +% |false|. +% \item[gap-mode] Boolean that is the inverse of \option{teacher-mode} +% and just provided for convenience, i.e., you can use it as a short +% form for \option{teacher-mode}|=false|. +% \item[teachermode] Alternative name for \option{teacher-mode} because +% that is what it was called in the first package release. +% \end{description} +% +% \subsubsection{Gap formatting} +% +% Formatting of the gaps is handled by the following five options: +% \begin{description} +% \item[gap-format] A choice option that defines how the gap is +% marked. It accepts the following values: |underline| (default), +% |dash|, |dot|, |wave| or |blank|. +% \item[teacher-gap-format] Another choice option to be used in case we +% are in ``teacher mode''. It accepts the same values, but this time +% the default is |blank| as normally the gap text is typeset in bold +% font and is therefore already identifiable and doesn't additionally +% underlining or some sort. However, depending on the circumstances it +% might be helpful to keep the underlining (or use a different kind of +% underlining) while in ``teacher mode''. +% \item[gap-font] This option expects a font directive as its value, +% e.g., |\bfseries| (which is also the default). Using this option +% without suppling a value is equivalent to supplying an empty +% value. It will be used to determine the font for the gap material +% regardless of the mode. This is important to ensure that the gaps +% always have the same width regardless of whether or not the material +% is shown. +% +% For the example puzzle above it was set to |\itshape| which you can +% see in the puzzle answer. +% \item[dash] Short name for \option{gap-format}|=dash|. +% \item[dot] Short name for \option{gap-format}|=dot|. +% \end{description} +% +% \subsubsection{Gap numbers} +% +% Producing the gap numbers is handled by the following options: +% \begin{description} +% \item[gap-numbers] Boolean that determines whether nor not gap numbers +% are displayed. Default is |true|. +% \item[gap-number-format] Code that is executed if gap number are +% produced. Default is \verb*|\textnormal{ (\thegapnumber)}|. +% \item[numbers] Short name for \option{gap-numbers}. +% \end{description} +% +% There is also a way to control displaying the total number of gaps: +% \begin{description} +% \item[display-total-gaps] Boolean to determine if the total number of +% gaps should be shown at the very end of the document. Default is +% |false|. +% \item[displaynbgaps] This is just another name for the same boolean +% that was used in the first version of the package. +% \end{description} +% +% +% +% \subsubsection{Gap widening} +% +% Finally, for extending the gap width we have these options: +% \begin{description} +% \item[gap-widen] Boolean that decides if the gaps should be made wider +% or not (default is |false| but mainly for historical reasons. +% \item[gap-extend-minimum] Minimum of extra space that should be added +% to each gap if gap widening is active. Default is |10pt|. +% \item[gap-extend-percent] Percentage (as a number) by which the gap should be made +% wider if widening is active. The result is compared to +% \option{gap-extend-minimum} and the larger of the two is +% used. Default is |20|. +% \item[widen] Short name for \option{gap-widen}. +% \end{description} +% +% +% +% +% \section{Differences to the original package} +% +% The main user interface of the two versions is identical so that it is +% possible to use the new version as a drop-in replacement for the +% old. However, the feature set in form of key/value options has be +% greatly extended offering functionality that have been previously +% unavailable. Furthermore a number of bugs have been corrected (and +% possibly new ones introduced). +% +% \begin{itemize} +% \item +% Stray spaces in the definition of \cs{gap} (that showed up in +% the output) have been eliminated; +% \item +% Various combinations of options that didn't work are now possible; +% \item +% Nesting isn't possible for obvious reasons, but the fact is now +% detected and catered for by ignoring the inner gap requests after +% generating an error; +% \item +% Option names have been normalized (though the original names are +% still available); +% \item +% The option \option{phantomtext} is no longer necessary, though still +% supported (with a warning) as a no-op; +% \item +% The names of the \LaTeX{} counters used have changed, so if you +% directly addressed them that would need changing; +% \item +% The font used in teacher mode (by default boldface) is now also +% being used if gap mode is chosen, to ensure that the output in all +% modes will produce identical line breaks; For that reason the +% pkg{ulem} machinery is always used, even if not underlining (or +% dashing, etc.) is needed. +% \item The gaps can be extended by a percentage or by some minimal +% amount to ensure that there is enough space to fill in the text +% (given that hand-written text is typically wider than typeset +% material. The values are adjustable; +% \item +% \cs{gap} has now an optional argument through which you can +% explicitly request the type on underlining you want to use; +% \item +% It also supports a star form which toggles the setting of gap numbers; +% \item +% The Use of \cs{label} within the \cs{gap} command argument allows to +% later refer to that gap by its number (provided a gap number is typeset); +% \item The implementation is done with \texttt{expl3} the programming +% language for \LaTeX3. +% \end{itemize} +% +% \section{Solution to the puzzle} \label{sec:answer} +% +% \TeacherModeOn +% +% Here we repeat the puzzle from above with \cs{TeacherModeOn}. +% \puzzletext +% This was produced using the following changes to the defaults: +% \begin{verbatim} +% \dashundergapssetup{ +% ,gap-number-format = \,\textsuperscript{\normalfont(\thegapnumber)} +% ,gap-font = \itshape +% ,teacher-gap-format = underline +% ,gap-widen +% } +% \end{verbatim} +% As you can see we use |\itshape| for the font (to be able to show +% the bold face in one of the answers) and also forced underlining in +% teacher mode to better show the gap widening. The gap number is +% raised and we separate it a tiny bit from the gap material. We also +% use \cs{normalfont} in the formatting to ensure that the gap number +% is set upright and not in italic shape. +% +% +% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex } +% +% \DoNotIndex{\ ,\advance,\begingroup,\bgroup,\def,\else,\endgroup,\fi} +% \DoNotIndex{\hbox,\ifx,\kern,\let,\lower,\@M,\@empty,\c@gapnumber} +% \DoNotIndex{\c@totalgapnumber,\hb@xt@,\LA@penalty,\UL@box,\UL@leaders} +% \DoNotIndex{\UL@leadtype,\UL@setULdepth,\UL@skip,\UL@start,\z@,\ULdepth} +% \DoNotIndex{\ULon,\vrule,\wd,\@width,\UL@putbox,\markoverwith} +% +% \section{The Implementation} +% +% \subsection{Loading and fixing \pkg{ulem}} +% +% First thing to do is to load \pkg{ulem} without changing \cs{emph} +% or \cs{em}: +% \begin{macrocode} +%<*package> +\RequirePackage[normalem]{ulem} +% \end{macrocode} +% +% The code in this section follows \LaTeXe{} conventions, i.e., models +% the commands like they look in \pkg{ulem} itself. +% +% \begin{macro}{\dotuline} +% The dot produce by \cs{dotuline} depends on the current font +% which is a somewhat questionable design (if you underline a part +% with a single bold word somewhere inside it will change the +% shape of the dot line). So we always use the \cs{normalfont} dot. +% \begin{macrocode} +\def\dotuline{\bgroup + \UL@setULdepth + \markoverwith{\begingroup + \advance\ULdepth0.08ex + \lower\ULdepth\hbox{\normalfont \kern.1em .\kern.04em}% + \endgroup}% + \ULon} +% \end{macrocode} +% \end{macro} + + + +% \begin{macro}[int]{\@ublank} +% \cs{@ublank} underlines with blanks. Normally not really useful +% (which is why we make it internal), +% but when we want to have \pkg{ulem} acting---but without actually +% underlining with something visible---that is the command to use. +% \begin{macrocode} +\def\@ublank{\bgroup\let\UL@leadtype\@empty\ULon} +% \end{macrocode} +% \end{macro} + + + +% \begin{macro}[int]{\phantom@putbox} +% This is going to be a replacement for \cs{UL@putbox} when we want +% \pkg{ulem} to underline something but show a gap instead of the material. +% \begin{macrocode} +\def\phantom@putbox{\ifx\UL@start\@empty \else % not inner + \vrule\@width\z@ \LA@penalty\@M + {\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}% + \hb@xt@\wd\UL@box{}% +\fi} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{The main implementation part} +% +% The rest of the package is written in \texttt{expl3}. We use +% \texttt{fmdug} as our internal prefix. + +% \begin{macrocode} +%<@@=fmdug> +% \end{macrocode} +% +% We need \pkg{xparse} and \pkg{l3keys2e} +% \begin{macrocode} +\RequirePackage{xparse,l3keys2e} +% \end{macrocode} +% +% \begin{macrocode} +\ProvidesExplPackage + {dashundergaps} + {2018/06/24} + {v2.0a} + {Dashing and underlining (phantom) text} +% \end{macrocode} +% +% +% \subsubsection{User interface commands} +% + +% \begin{macro}{\gap} +% Gap takes a star, optional and mandatory +% argument and calls \cs{@@_gap:nnn} to do the work. +% \begin{macrocode} +\DeclareDocumentCommand \gap { som } { \@@_gap:nnn {#1}{#2}{#3} } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\dashundergapssetup} +% Change options anywhere. +% \begin{macrocode} +\NewDocumentCommand \dashundergapssetup { m } + { \keys_set:nn {fmdug} {#1} \ignorespaces } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\TeacherModeOn} +% \begin{macro}{\TeacherModeOff} +% We provide shortcuts for turning teacher mode on or off. +% \begin{macrocode} +\DeclareDocumentCommand \TeacherModeOn {} + { \bool_set_true:N \l_@@_teacher_bool } +\DeclareDocumentCommand \TeacherModeOff {} + { \bool_set_true:N \l_@@_teacher_bool } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% \subsubsection{Counters} +% +% \begin{macro}[int]{\c@gapnumber} +% We have one user-level counter which is referenceable and holds +% the gap number of the current gap. It can be reset to 0 to +% restart counting. +% \begin{macrocode} +\newcounter{gapnumber} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}[int]{\c@totalgapnumber} +% We also keep track of all gaps ever made using another user-level counter. +% \begin{macrocode} +\newcounter{totalgapnumber} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\l_@@_extend_dim} +% A help register to calculate the gap width later on. +% \begin{macrocode} +\dim_new:N \l_@@_extend_dim +% \end{macrocode} +% \end{macro} + + + +% \begin{macro}{\l_@@_extra_left_gap_tl} +% \begin{macro}{\l_@@_extra_right_gap_tl} +% Two scratch token lists to enlarge the gap on the left or right side. +% \begin{macrocode} +\tl_new:N \l_@@_extra_left_gap_tl +\tl_new:N \l_@@_extra_right_gap_tl +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \subsubsection{Messages} +% +% \begin{macrocode} +\msg_new:nnn {dashundergaps} {deprecated} + { + The~ #1~ `#2'~ you~ used~ \msg_line_context: \ is~ deprecated~and~ there~ + is~ no~ replacement.~ Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~ + will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ remove~ it~ + from~ your~ document. + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnnn {dashundergaps} {nested} + { The~ \gap command~ can't~ be~ tested! } + { Nesting~ doesn't~ make~ much~ sense~ as~ the~ inner~ one~ wouldn't~ be~ + visible.~ ~ To~ allow~ continuation~ it~ is~ handled~ as~ if~ it~ wasn't~ + been~ asked~ for. } +% \end{macrocode} +% +% +% +% +% \subsubsection{Option handling} +% +% Here we define all option keys for use as package options or inside +% \cs{dashundergapssetup}. these are all straight forward assignments +% to variables. These internal variables are declared by the key +% declarations if unknown, so they are not separately declared before. +% \begin{macrocode} +\keys_define:nn {fmdug} + { + % ==================================== + ,teacher-mode .bool_set:N = \l_@@_teacher_bool + ,teacher-mode .default:n = true + ,teacher-mode .initial:n = false + % ------------------ + ,gap-mode .bool_set_inverse:N = \l_@@_teacher_bool + % ==================================== + ,gap-format + .choice: + ,gap-format / underline + .code:n = \tl_set:Nn \l_@@_gap_format_tl { \uline } + ,gap-format / dash + .code:n = \tl_set:Nn \l_@@_gap_format_tl { \dashuline } + ,gap-format / dot + .code:n = \tl_set:Nn \l_@@_gap_format_tl { \dotuline } + ,gap-format / wave + .code:n = \tl_set:Nn \l_@@_gap_format_tl { \uwave } + ,gap-format / blank + .code:n = \tl_set:Nn \l_@@_gap_format_tl { \@ublank } + ,gap-format / unknown + .code:n = \tl_set:Nn \l_@@_gap_format_tl { #1 } + ,gap-format + .initial:n = underline + % ==================================== + ,teacher-gap-format + .choice: + ,teacher-gap-format / underline + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { \uline } + ,teacher-gap-format / dash + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { \dashuline } + ,teacher-gap-format / dot + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { \dotuline } + ,teacher-gap-format / wave + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { \uwave } + ,teacher-gap-format / blank + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { \@ublank } + ,teacher-gap-format / unknown + .code:n = \tl_set:Nn \l_@@_teacher_gap_format_tl { #1 } + ,teacher-gap-format + .initial:n = blank + % ==================================== + ,gap-widen .bool_set:N = \l_@@_gap_widen_bool + ,gap-widen .default:n = true + ,gap-widen .initial:n = false + % ------------------ + ,widen .meta:n = { gap-widen } + % ------------------ + ,gap-extend-minimum .dim_set:N = \l_@@_gap_min_dim + ,gap-extend-minimum .initial:n = 10pt + % ------------------ + ,gap-extend-percent .tl_set:N = \l_@@_gap_percent_tl + ,gap-extend-percent .initial:n = 20 + % ==================================== + ,gap-numbers .bool_set:N = \l_@@_number_bool + ,gap-numbers .default:n = true + ,gap-numbers .initial:n = true + % ------------------ + ,numbers .meta:n = { gap-numbers } + % ------------------ + ,gap-number-format .tl_set:N = \l_@@_gapnum_format_tl + ,gap-number-format .initial:n = \textnormal{\space (\thegapnumber)} + % ==================================== + ,display-total-gaps .bool_gset:N = \g_@@_display_total_gaps_bool + ,display-total-gaps .default:n = true + ,display-total-gaps .initial:n = false + % ==================================== + ,gap-font .tl_set:N = \l_@@_font_tl + ,gap-font .default:n = + ,gap-font .initial:n = \bfseries +% \end{macrocode} +% And finally the original options: +% \begin{macrocode} + % ==================================== + ,teachermode .meta:n = { teacher-mode } + ,dash .meta:n = { gap-format = dash } + ,dot .meta:n = { gap-format = dot } + ,displaynbgaps .meta:n = { display-total-gaps } + % ------------------ + ,phantomtext + .code:n = \msg_warning:nnnn{dashundergaps}{deprecated} + {option}{phantomtext} + % ==================================== + } +% \end{macrocode} +% +% +% \begin{macro}{\@@_gap:nnn} +% And here finally comes the action. \cs{@@_gap:nn} expects two +% arguments: |#1| indicates what kind of ``underlining'' is wanted +% (anything not recognized is ignored, in particular +% ``--NoValue--'' if \cs{gap} was used without optional argument) +% and |#2| is the material to produce a gap for. +% \begin{macrocode} +\cs_new:Npn\@@_gap:nnn #1#2#3 { +% \end{macrocode} +% +% \begin{macrocode} + \group_begin: +% \end{macrocode} +% Define the font used inside the gap. We need to do this up front +% since we want to measure the text (and that needs the correct +% font already). +% \begin{macrocode} + \l_@@_font_tl +% \end{macrocode} +% Nesting is not supported so inside the gap we redefine +% \cs{@@_gap:nnn} to raise an error and just return the third argument if it is +% encountered again. +% \begin{macrocode} + \cs_set:Npn \@@_gap:nnn ##1##2##3 + { + \msg_error:nn{dashundergaps}{nested} + ##3 + } +% \end{macrocode} +% We increment the counter for the total number of gaps always, but +% the |gapnumber| only if we are displaying it. For the latter one +% we use \cs{refstepcounter} to make it referenceable. +% \begin{macrocode} + \stepcounter{totalgapnumber} + \bool_xor:nnT { #1 } { \l_@@_number_bool } + { \refstepcounter{gapnumber} } +% \end{macrocode} +% Next we prepare for widening if that is being asked for: Measure +% the with of the text and then set \cs{l_@@_extend_dim} to be the +% requested percentage divided by two of that width (since we add +% it later on both sides. + +% Then compare it to the minimum / 2 and choose whatever is larger. +% \begin{macrocode} + \bool_if:NTF \l_@@_gap_widen_bool + { + \settowidth \l_@@_extend_dim {#3} + \dim_set:Nn \l_@@_extend_dim + { \l_@@_gap_percent_tl \l_@@_extend_dim / 200 } +% + \dim_compare:nNnT \l_@@_extend_dim < { .5\l_@@_gap_min_dim } + { \dim_set:Nn \l_@@_extend_dim { .5\l_@@_gap_min_dim } } +% \end{macrocode} +% Now we prepare what needs to go to the left and the right of the gap. +% \begin{macrocode} + \tl_set:Nn \l_@@_extra_left_gap_tl + { \hbox_to_wd:nn\l_@@_extend_dim{} \allowbreak } + \tl_set:Nn \l_@@_extra_right_gap_tl + { \allowbreak \hbox_to_wd:nn\l_@@_extend_dim{} } + } +% \end{macrocode} +% And if no widening is asked for we clear these two token lists so +% that they don't do anything. +% \begin{macrocode} + { + \tl_clear:N \l_@@_extra_left_gap_tl + \tl_clear:N \l_@@_extra_right_gap_tl + } +% \end{macrocode} +% Next comes deciding the gap format. If in teacher mode it will be +% whatever is in \cs{l_@@_teacher_gap_tl}. Otherwise it is either +% based on the content of the optional argument or if that is not +% given or unknown it will be \cs{l_@@_gap_format_tl}. +% \begin{macrocode} + \bool_if:NTF \l_@@_teacher_bool + { \l_@@_teacher_gap_format_tl } + { \cs_set_eq:NN \UL@putbox \phantom@putbox + \str_case:nnF {#2} + { + {u} { \uline } + {w} { \uwave } + {b} { \@ublank } + {.} { \dotuline } + {-} { \dashuline } + } + { \l_@@_gap_format_tl } + } +% \end{macrocode} +% Whatever was decided as gap format it needs one argument, +% i.e., the material (with possible gap extension on both sides. +% \begin{macrocode} + {\l_@@_extra_left_gap_tl #3 \l_@@_extra_right_gap_tl } +% \end{macrocode} +% Finally we typeset the gap number is that was requested. +% \begin{macrocode} + \bool_xor:nnT { #1 } { \l_@@_number_bool } + { \l_@@_gapnum_format_tl } +% \end{macrocode} +% +% \begin{macrocode} + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@@_display_total_gaps:} +% This command will display the total number of gaps if +% requested. The hard-wired formatting comes from the first +% version of the package. +% \begin{macrocode} +\cs_new:Npn \@@_display_total_gaps: { + \vfill \centering + \bfseries Total~ Gaps:~ \thetotalgapnumber +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsubsection{Closing shop} +% +% At the end of the document we typeset the total number of gaps if requested. +% \begin{macrocode} +\AtEndDocument{ + \bool_if:NT \g_@@_display_total_gaps_bool + \@@_display_total_gaps: +} +% \end{macrocode} +% So what remains to be done is execute all options passed to the +% package via \cs{usepackage}. +% \begin{macrocode} +\ProcessKeysPackageOptions{fmdug} +%<*package> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.ins b/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.ins new file mode 100644 index 00000000000..389a83ef0a9 --- /dev/null +++ b/Master/texmf-dist/source/latex/dashundergaps/dashundergaps.ins @@ -0,0 +1,67 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the dtx file(s) in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 2018 Frank Mittelbach +%% +%% +%% This file is part of the dashundergaps Bundle for LaTeX. +%% ------------------------------------------------------- +%% +%% It 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.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\input l3docstrip + +\keepsilent + +\usedir{tex/latex/contrib/dashundergaps} + +\preamble + +This is a generated file. + +Copyright 2018 Frank Mittelbach + +This file was generated from file(s) of the LaTeX `dashundergaps Bundle'. +-------------------------------------------------------------------------- + +It 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.3c or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +`Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +without such generated files. + +The newest sources can be found below + + https://github.com/FrankMittelbach/fmitex/ + +where one can also log issues in case there are any. + + +\endpreamble + + +\generate{\file{dashundergaps.sty}{\from{dashundergaps.dtx}{package}}} + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/dashundergaps/dashundergaps.sty b/Master/texmf-dist/tex/latex/dashundergaps/dashundergaps.sty index fb6e197aea2..17db0222797 100644 --- a/Master/texmf-dist/tex/latex/dashundergaps/dashundergaps.sty +++ b/Master/texmf-dist/tex/latex/dashundergaps/dashundergaps.sty @@ -1,78 +1,225 @@ -%% This is file `dashundergaps.sty' v1.2 by Merciadri Luca. - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{dashundergaps}[2010/01/20 Dashing and underlining (phantom) text] -\PackageInfo{dashundergaps}{This is DashUnderGaps by Merciadri Luca.} - -\RequirePackage{ifthen}[1994/06/01] -\PassOptionsToPackage{normalem}{ulem} -\RequirePackage{ulem} -\newboolean{dot} % false at start -\newboolean{dash} % false at start - - -\DeclareOption{dash}{% -\typeout{Dashing mode activated!} -\setboolean{dash}{true} -\providecommand{\dashuline}{\bgroup -\ifdim\ULdepth=\maxdimen -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\kern.15em -\vtop{\kern\ULdepth \hrule width .3em}% -\kern.15em}\ULon} -} - - -\DeclareOption{dot}{% -\typeout{Dotting mode activated!} -\setboolean{dot}{true} -\providecommand{\dotuline}{\bgroup -\ifdim\ULdepth=\maxdimen -\settodepth\ULdepth{(j}\advance\ULdepth.4pt\fi -\markoverwith{\begingroup -\advance\ULdepth0.08ex -\lower\ULdepth\hbox{\kern.15em .\kern.1em}% -\endgroup}\ULon} -} - - -\DeclareOption{phantomtext}{% -\typeout{Phantom mode activated! All the gaps will be filled.} -\newboolean{teachernotes} % false at start -\newcounter{nb-gaps} -\setcounter{nb-gaps}{1} -\newcounter{nth-gaps} -\setcounter{nth-gaps}{1} +%% +%% This is file `dashundergaps.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% dashundergaps.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright 2018 Frank Mittelbach +%% +%% This file was generated from file(s) of the LaTeX `dashundergaps Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It 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.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The newest sources can be found below +%% +%% https://github.com/FrankMittelbach/fmitex/ +%% +%% where one can also log issues in case there are any. +%% +%% +%% File: dashundergaps.dtx (C) Copyright 2018 Frank Mittelbach +\RequirePackage[normalem]{ulem} +\def\dotuline{\bgroup + \UL@setULdepth + \markoverwith{\begingroup + \advance\ULdepth0.08ex + \lower\ULdepth\hbox{\normalfont \kern.1em .\kern.04em}% + \endgroup}% + \ULon} + +\def\@ublank{\bgroup\let\UL@leadtype\@empty\ULon} \def\phantom@putbox{\ifx\UL@start\@empty \else % not inner \vrule\@width\z@ \LA@penalty\@M {\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}% - \hbox to\wd\UL@box{}\fi}% - -\providecommand{\gap}[1]{% -\bgroup -\let\UL@putbox=\phantom@putbox -\ifthenelse{\boolean{teachernotes}} -{\textbf{#1} (\arabic{nth-gaps})} -{\ifthenelse{\boolean{dash} \AND \boolean{dot}}{\uline{#1}(\arabic{nth-gaps})}{\ifthenelse{\boolean{dash}}{\dashuline{#1} (\arabic{nth-gaps})}{\ifthenelse{\boolean{dot}}{\dotuline{#1} (\arabic{nth-gaps})}{\uline{#1} (\arabic{nth-gaps})}}} + \hb@xt@\wd\UL@box{}% +\fi} + +\RequirePackage{xparse,l3keys2e} +\ProvidesExplPackage + {dashundergaps} + {2018/06/24} + {v2.0a} + {Dashing and underlining (phantom) text} + +\DeclareDocumentCommand \gap { som } { \__fmdug_gap:nnn {#1}{#2}{#3} } +\NewDocumentCommand \dashundergapssetup { m } + { \keys_set:nn {fmdug} {#1} \ignorespaces } +\DeclareDocumentCommand \TeacherModeOn {} + { \bool_set_true:N \l__fmdug_teacher_bool } +\DeclareDocumentCommand \TeacherModeOff {} + { \bool_set_true:N \l__fmdug_teacher_bool } +\newcounter{gapnumber} +\newcounter{totalgapnumber} + +\dim_new:N \l__fmdug_extend_dim + +\tl_new:N \l__fmdug_extra_left_gap_tl +\tl_new:N \l__fmdug_extra_right_gap_tl +\msg_new:nnn {dashundergaps} {deprecated} + { + The~ #1~ `#2'~ you~ used~ \msg_line_context: \ is~ deprecated~and~ there~ + is~ no~ replacement.~ Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~ + will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ remove~ it~ + from~ your~ document. + } +\msg_new:nnnn {dashundergaps} {nested} + { The~ \gap command~ can't~ be~ tested! } + { Nesting~ doesn't~ make~ much~ sense~ as~ the~ inner~ one~ wouldn't~ be~ + visible.~ ~ To~ allow~ continuation~ it~ is~ handled~ as~ if~ it~ wasn't~ + been~ asked~ for. } +\keys_define:nn {fmdug} + { + % ==================================== + ,teacher-mode .bool_set:N = \l__fmdug_teacher_bool + ,teacher-mode .default:n = true + ,teacher-mode .initial:n = false + % ------------------ + ,gap-mode .bool_set_inverse:N = \l__fmdug_teacher_bool + % ==================================== + ,gap-format + .choice: + ,gap-format / underline + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { \uline } + ,gap-format / dash + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { \dashuline } + ,gap-format / dot + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { \dotuline } + ,gap-format / wave + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { \uwave } + ,gap-format / blank + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { \@ublank } + ,gap-format / unknown + .code:n = \tl_set:Nn \l__fmdug_gap_format_tl { #1 } + ,gap-format + .initial:n = underline + % ==================================== + ,teacher-gap-format + .choice: + ,teacher-gap-format / underline + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { \uline } + ,teacher-gap-format / dash + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { \dashuline } + ,teacher-gap-format / dot + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { \dotuline } + ,teacher-gap-format / wave + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { \uwave } + ,teacher-gap-format / blank + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { \@ublank } + ,teacher-gap-format / unknown + .code:n = \tl_set:Nn \l__fmdug_teacher_gap_format_tl { #1 } + ,teacher-gap-format + .initial:n = blank + % ==================================== + ,gap-widen .bool_set:N = \l__fmdug_gap_widen_bool + ,gap-widen .default:n = true + ,gap-widen .initial:n = false + % ------------------ + ,widen .meta:n = { gap-widen } + % ------------------ + ,gap-extend-minimum .dim_set:N = \l__fmdug_gap_min_dim + ,gap-extend-minimum .initial:n = 10pt + % ------------------ + ,gap-extend-percent .tl_set:N = \l__fmdug_gap_percent_tl + ,gap-extend-percent .initial:n = 20 + % ==================================== + ,gap-numbers .bool_set:N = \l__fmdug_number_bool + ,gap-numbers .default:n = true + ,gap-numbers .initial:n = true + % ------------------ + ,numbers .meta:n = { gap-numbers } + % ------------------ + ,gap-number-format .tl_set:N = \l__fmdug_gapnum_format_tl + ,gap-number-format .initial:n = \textnormal{\space (\thegapnumber)} + % ==================================== + ,display-total-gaps .bool_gset:N = \g__fmdug_display_total_gaps_bool + ,display-total-gaps .default:n = true + ,display-total-gaps .initial:n = false + % ==================================== + ,gap-font .tl_set:N = \l__fmdug_font_tl + ,gap-font .default:n = + ,gap-font .initial:n = \bfseries + % ==================================== + ,teachermode .meta:n = { teacher-mode } + ,dash .meta:n = { gap-format = dash } + ,dot .meta:n = { gap-format = dot } + ,displaynbgaps .meta:n = { display-total-gaps } + % ------------------ + ,phantomtext + .code:n = \msg_warning:nnnn{dashundergaps}{deprecated} + {option}{phantomtext} + % ==================================== + } +\cs_new:Npn\__fmdug_gap:nnn #1#2#3 { + \group_begin: + \l__fmdug_font_tl + \cs_set:Npn \__fmdug_gap:nnn ##1##2##3 + { + \msg_error:nn{dashundergaps}{nested} + ##3 + } + \stepcounter{totalgapnumber} + \bool_xor:nnT { #1 } { \l__fmdug_number_bool } + { \refstepcounter{gapnumber} } + + \bool_if:NTF \l__fmdug_gap_widen_bool + { + \settowidth \l__fmdug_extend_dim {#3} + \dim_set:Nn \l__fmdug_extend_dim + { \l__fmdug_gap_percent_tl \l__fmdug_extend_dim / 200 } + \dim_compare:nNnT \l__fmdug_extend_dim < { .5\l__fmdug_gap_min_dim } + { \dim_set:Nn \l__fmdug_extend_dim { .5\l__fmdug_gap_min_dim } } + \tl_set:Nn \l__fmdug_extra_left_gap_tl + { \hbox_to_wd:nn\l__fmdug_extend_dim{} \allowbreak } + \tl_set:Nn \l__fmdug_extra_right_gap_tl + { \allowbreak \hbox_to_wd:nn\l__fmdug_extend_dim{} } + } + { + \tl_clear:N \l__fmdug_extra_left_gap_tl + \tl_clear:N \l__fmdug_extra_right_gap_tl + } + \bool_if:NTF \l__fmdug_teacher_bool + { \l__fmdug_teacher_gap_format_tl } + { \cs_set_eq:NN \UL@putbox \phantom@putbox + \str_case:nnF {#2} + { + {u} { \uline } + {w} { \uwave } + {b} { \@ublank } + {.} { \dotuline } + {-} { \dashuline } + } + { \l__fmdug_gap_format_tl } + } + {\l__fmdug_extra_left_gap_tl #3 \l__fmdug_extra_right_gap_tl } + \bool_xor:nnT { #1 } { \l__fmdug_number_bool } + { \l__fmdug_gapnum_format_tl } + \group_end: } -\addtocounter{nb-gaps}{1} -\addtocounter{nth-gaps}{1} -\egroup -}} - - -\DeclareOption{teachernotes}{% -\typeout{Phantom mode deactivated! All the gaps will be filled with their content.} -\setboolean{teachernotes}{true} +\cs_new:Npn \__fmdug_display_total_gaps: { + \vfill \centering + \bfseries Total~ Gaps:~ \thetotalgapnumber } - - -\DeclareOption{displaynbgaps}{% -\typeout{Gaps counting mode activated!} -\addtocounter{nb-gaps}{-1} -\AtEndDocument{\vfill \centering \bfseries GAPS: \arabic{nb-gaps}.} +\AtEndDocument{ + \bool_if:NT \g__fmdug_display_total_gaps_bool + \__fmdug_display_total_gaps: } - -\ProcessOptions\relax - +\ProcessKeysPackageOptions{fmdug} +\endinput +%% +%% End of file `dashundergaps.sty'. |