texlive[43370] Master/texmf-dist: proofread (1mar17)

commits+karl at tug.org commits+karl at tug.org
Wed Mar 1 23:29:50 CET 2017


Revision: 43370
          http://tug.org/svn/texlive?view=revision&revision=43370
Author:   karl
Date:     2017-03-01 23:29:50 +0100 (Wed, 01 Mar 2017)
Log Message:
-----------
proofread (1mar17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/proofread/README
    trunk/Master/texmf-dist/doc/latex/proofread/README.txt
    trunk/Master/texmf-dist/doc/latex/proofread/example.tex
    trunk/Master/texmf-dist/doc/latex/proofread/proofread.pdf
    trunk/Master/texmf-dist/source/latex/proofread/proofread.dtx
    trunk/Master/texmf-dist/source/latex/proofread/proofread.ins
    trunk/Master/texmf-dist/tex/latex/proofread/proofread.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/proofread/example.pdf
    trunk/Master/texmf-dist/doc/latex/proofread/proofread.vmb

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/proofread/vimrc

Modified: trunk/Master/texmf-dist/doc/latex/proofread/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/README	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/doc/latex/proofread/README	2017-03-01 22:29:50 UTC (rev 43370)
@@ -11,8 +11,7 @@
 when you proofread a latex document. These allow you to easily highlight
 text and add comments in the margin. Vim escape sequences are provided
 for inserting these LaTeX commands in the source. The package is based
-on code for a text highlighting command that was published by Antal S-Z
-in http://tex.stackexchange.com/questions/5959.
-The main file, proofread.dtx, is self-extracting, so you can generate the
-style file by compiling proofread.dtx with pdflatex.
-
+on code for a text highlighting command that was published by Antal
+Spector-Zabusky in http://tex.stackexchange.com/questions/5959. The main file,
+proofread.dtx, is self-extracting, so you can generate the style file by
+compiling proofread.dtx with pdflatex.

Modified: trunk/Master/texmf-dist/doc/latex/proofread/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/README.txt	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/doc/latex/proofread/README.txt	2017-03-01 22:29:50 UTC (rev 43370)
@@ -11,8 +11,7 @@
 when you proofread a latex document. These allow you to easily highlight
 text and add comments in the margin. Vim escape sequences are provided
 for inserting these LaTeX commands in the source. The package is based
-on code for a text highlighting command that was published by Antal S-Z
-in http://tex.stackexchange.com/questions/5959.
-The main file, proofread.dtx, is self-extracting, so you can generate the
-style file by compiling proofread.dtx with pdflatex.
-
+on code for a text highlighting command that was published by Antal
+Spector-Zabusky in http://tex.stackexchange.com/questions/5959. The main file,
+proofread.dtx, is self-extracting, so you can generate the style file by
+compiling proofread.dtx with pdflatex.

Added: trunk/Master/texmf-dist/doc/latex/proofread/example.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/proofread/example.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/example.pdf	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/doc/latex/proofread/example.pdf	2017-03-01 22:29:50 UTC (rev 43370)

Property changes on: trunk/Master/texmf-dist/doc/latex/proofread/example.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/proofread/example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/example.tex	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/doc/latex/proofread/example.tex	2017-03-01 22:29:50 UTC (rev 43370)
@@ -1,102 +1,121 @@
-\documentclass{article}
-\usepackage[a5paper,right=50mm]{geometry}
+\documentclass[12pt]{memoir}
 \usepackage[dutch]{babel}
-\usepackage{microtype}
-\usepackage{proofread}
+\usepackage[
+  %corrected,
+  %uncorrected,
+  onehalfspacing,
+  %doublespacing,
+  frame,
+]{proofread}
+\usepackage{ctable}
+\marginparwidth=35mm
 \begin{document}
 Een canon van het Nederlands verleden.
 
-Iedere tijd ontwerpt een eigen versie van het verleden. Vroeger gebeurde
-dat bij het kampvuur. Later werd dat op scholen meeslepend verteld. Nu zou
-televisie het voor de hand liggende medium zijn. Alleen, dat gebeurt niet.
-Daar \rep{schijnt}{lijkt} de gedachte te heersen dat geschiedenis eigenlijk te saai is
-om een aardig kijkerspubliek te trekken. Daarom krijgt het de vorm van een
-gezelschaps\del{ }spelletje, zoals de verkiezing van `de grootste Nederlander
-aller tijden'.
+Iedere tijd\footnote{Dit is een voetnoot waarin ik een verbetering
+\rep{moet}{wil} aanbrengen} ontwerpt een eigen \hilite{versie van het verleden}.
+Vroeger gebeurde dat bij het kampvuur. Later werd dat op scholen meeslepend
+verteld. Nu zou televisie het voor de hand liggende medium zijn. Alleen, dat
+gebeurt niet. Daar \rep{schijnt}{lijkt} de gedachte te heersen dat geschiedenis
+eigenlijk te saai is om een aardig kijkerspubliek te trekken. Daarom krijgt het
+de vorm van een gezelschaps\del{ }spelletje, zoals de verkiezing van `de
+grootste Nederlander aller tijden'.
 
-Het is de vraag op grond van welke kennis de kijkers straks deze
-historische `idol' kiezen. \yel[commentaar op een zin]{Gezien de verbrokkeling van het
-geschiedenisonderwijs kan het hier moeilijk om veel meer gaan dan
-bliksemschichten in het donker.}
+Het is de vraag op grond van welke kennis de kijkers straks deze historische
+`idol' kiezen. \yel[commentaar op een zin; ik maak het lekker lang om nieuwe
+regels te forceren.]{Gezien de verbrokkeling van het geschiedenisonderwijs kan
+het hier moeilijk om veel meer gaan dan bliksemschichten in het donker.}
 
+\ctable[caption=test]{c}{}{\FL
+  Test met een margin yel \yel[een lange opmerking hierbij]{tast}\LL
+}
+
 Dat er weinig belangstelling zou zijn voor serieuze geschiedenis is een
-merkwaardig vooroordeel in `Hilversum', dat ook heerst in `Den
-Haag'. Alleen al de opmerkelijk hoge oplagen van een auteur als Geert
-Mak zouden op het tegendeel kunnen wijzen.
+merkwaardig vooroordeel in `Hilversum', dat ook heerst in `Den Haag'. Alleen al
+de opmerkelijk hoge oplagen van een auteur als Geert Mak zouden op het tegendeel
+kunnen wijzen.
 
-Weinig behulpzaam zijn pleidooien van al diegenen die, bezield van de meest
-nobele gedachten, beweren dat er geen historisch besef meer bestaat.
-Daarbij blijken zij meestal te bedoelen dat niemand meer een proefwerk kan
-maken dat sommigen van ons nog wel kennen van de middelbare school
-(althans: van v\'o\'or de Mammoetwet): `wie deed wat, wanneer en waarom?'
-Met hoon duikt telkens weer het beruchte proefwerk van het Historisch
-Nieuwsblad op, waarin Kamerleden op dit soort vragen een dikke onvoldoende
-scoorden. Een herhaling onlangs onder `gewone mensen' leverde een nog
-droeviger beeld op.
+\begin{minipage}{100mm}
+Weinig behulpzaam zijn pleidooien van al \rep{diegenen die}{wie}, bezield van de
+meest nobele gedachten, beweren dat er geen historisch besef meer bestaat.
+Daarbij blijken zij meestal te bedoelen dat niemand meer een proefwerk kan maken
+dat sommigen van ons nog wel kennen van de middelbare school (althans: van
+v\'o\'or de Mammoetwet): `wie deed wat, wanneer en waarom?' Met hoon duikt
+telkens weer het beruchte proefwerk van het Historisch Nieuwsblad op, waarin
+Kamerleden op dit soort vragen een dikke onvoldoende scoorden. Een herhaling
+onlangs onder `gewone mensen' leverde een nog droeviger beeld op.
 
+\end{minipage}
+
 Naast onwil heerst ook onzekerheid: welk verhaal valt hier te vertellen? De
-schuchterheid over het historisch verhaal is vooral een gevolg van
-veranderingen in de samenleving. Nederland is `ontzuild'. Kerken en
-politieke bewegingen hebben aan overtuigingskracht ingeboet. Het
-(emancipatie-)verleden van de eigen bevolkingsgroep is minder bruikbaar
-geworden. Bijpassende rituelen zijn vervaagd. De geschiedenis is minder
-vanzelfsprekend. Niet langer zijn hieraan wijze lessen en aansporingen te
-ontlenen. Historische kennis is verschraald tot eruditie.
+schuchterheid over het historisch verhaal is vooral een gevolg van veranderingen
+in de samenleving. Nederland is `ontzuild'. Kerken en politieke bewegingen
+hebben aan overtuigingskracht ingeboet. Het (emancipatie-)verleden van de eigen
+bevolkingsgroep is minder \rep{bruikbaar geworden}{relevant gemaakt}.
+Bijpassende rituelen zijn vervaagd. De geschiedenis is minder vanzelfsprekend.
+Niet langer zijn hieraan wijze lessen en aansporingen te ontlenen. Historische
+kennis is verschraald tot eruditie.
 
 Als we weer historisch besef willen kweken, dan gaat het niet zozeer om de
 weetjes: de jaartallen van rampen, vorsten en ontdekkingen\,---\,al is daar op
-zich\add{zelf} helemaal niets mis mee. Het gaat om de gedachte dat het heden niet
-goed te begrijpen valt zonder enig inzicht in de ontwikkeling tot dat
+zich\add{zelf} helemaal niets mis mee. Het gaat om de gedachte dat het heden
+niet goed te begrijpen valt zonder enig inzicht in de ontwikkeling tot dat
 heden. Anders gezegd, het gaat om het vermijden van het misverstand dat de
-wereld een schouwtoneel is waarvoor iedere dag het doek opnieuw wordt
-opgehaald.
+wereld een schouwtoneel is waarvoor iedere dag het doek opnieuw wordt opgehaald.
 
 Tegen deze ambitie klinken doorgaans twee bezwaren. Het eerste is dat dit
-allemaal voortvloeit uit nostalgie. Oude schoolmeesters zouden een
-achterhaald verlangen koesteren naar de overzichtelijkheid van de
-`nationalistische en etnocentrische geschiedschrijving van onze blanke
-voorvaderen'. Dit klinkt al erg genoeg, maar gewoonlijk volgt dan nog dat
-we nu eenmaal in een `postmoderne wereld' leven. De fragmentatie van
-mens en samenleving is niet langer in een consistent verhaal te vatten.
-`Laat duizend bloemen bloeien' en het komt vanzelf wel goed.
+allemaal voortvloeit uit nostalgie. Oude schoolmeesters zouden een achterhaald
+verlangen koesteren naar de overzichtelijkheid van de `nationalistische en
+etnocentrische geschiedschrijving van onze blanke voorvaderen'. Dit klinkt al
+erg genoeg, maar gewoonlijk volgt dan nog dat we nu eenmaal in een `postmoderne
+wereld' leven. De fragmentatie van mens en samenleving is niet langer in een
+consistent verhaal te vatten. `Laat duizend bloemen bloeien' en het komt
+vanzelf wel goed.
 
-Het tweede bezwaar is dat historisch besef op zichzelf, als een manier om
-naar de werkelijkheid te kijken, een tijdelijk verschijnsel is. Het is aan
-het eind van de achttiende eeuw opgekomen, beleefde zijn bloeitijd in de
-negentiende eeuw en zal nu ten onder gaan. We leven in een
-`posthistorische wereld'. Dit bezwaar versterkt de gedachte\,---\,die ook
-bij enkele belangrijke historici leeft\,---\,dat de strijd al is verloren en
-dat het geschiedenisonderwijs maar beter helemaal kan worden afgeschaft.
-Belangstelling voor geschiedenis is op z'n best een oude-mannenkwaal.
+Het tweede bezwaar is dat historisch besef op zichzelf, als een manier om naar
+de werkelijkheid te kijken, een tijdelijk verschijnsel is. Het is aan het eind
+van de achttiende eeuw opgekomen, beleefde zijn bloeitijd in de negentiende eeuw
+en zal nu ten onder gaan. We leven in een `posthistorische wereld'. Dit bezwaar
+versterkt de gedachte\,---\,die ook bij enkele belangrijke historici
+leeft\,---\,dat de strijd al is verloren en dat het geschiedenisonderwijs maar
+beter helemaal kan worden afgeschaft. Belangstelling voor geschiedenis is op z'n
+best een oude-mannenkwaal.
 
-En zo mogen we kiezen uit tuchteloosheid of vruchteloosheid. Het gevolg van
-deze verwarring is de opmerkelijke dictatuur van het nu en hier, het
-zogenaamde presentisme. Bijna tien jaar geleden merkte Rudy Kousbroek al
-eens op dat in Nederland, in tegenstelling tot allerlei andere landen,
-vooral de gedachte leeft dat weinig uit het verleden nog interessant of
-waardevol kan zijn: ``Dat is wat in dit land dat eigenaardige gevoel geeft
-dat er een dimensie ontbreekt.'' In het openbare debat is de
-continu\"iteit met het verleden nagenoeg afwezig.
+\begin{itemize}
+\item test
+\item test\add{ nog een test}
+\item test
+\item test
+\end{itemize}
 
-\del{Een dergelijke }\rep{c}{C}ontinu\"iteit wordt \rep{doorgaans}{veelal} gevonden in een canon: een
-geheel aan kennis en inzichten, aan ordening en interpretatie van het
-verleden. Daaraan dienen we meteen toe te voegen dat een dergelijk geheel
-niet onveranderlijk is. Integendeel, een canon mag en kan niet worden
-gecanoniseerd. Essentieel is juist dat deze voortdurend onderwerp is van
-reflectie. Wie en wat verdienen een plek in de canon en waarom? Micha\"el
-Zeeman zei hierover eens: ``De canon leert geen vaststaande grootheden, de
-canon onderwijst lezen, kijken en luisteren, dat is kritisch
-oordelen.'' De canon nodigt uit tot kritiek, tot aanvulling en in ieder
-geval tot gebruik.
+En zo mogen we kiezen uit tuchteloosheid of vruchteloosheid. Het gevolg van deze
+verwarring is de opmerkelijke dictatuur van het nu en hier, het zogenaamde
+presentisme. Bijna tien jaar geleden merkte Rudy Kousbroek al eens op dat in
+Nederland, in tegenstelling tot allerlei andere landen, vooral de gedachte leeft
+dat weinig uit het verleden nog interessant of waardevol kan zijn: ``Dat is wat
+in dit land dat eigenaardige gevoel geeft dat er een dimensie ontbreekt.'' In
+het openbare debat is de continu\"iteit met het verleden nagenoeg afwezig.
 
-We hebben geprobeerd\com{a comment without highlighting} een beknopte canon te formuleren voor de
-`Nederlandse' geschiedenis. Bij de samenstelling hebben drie criteria
-een rol gespeeld. Hoe heeft het huidige Nederland zich gevormd? Welk
-politiek-bestuurlijk systeem was in dit gebied overheersend? Welke
+\del{Een dergelijke }\skp\rep{c}{C}ontinu\"iteit wordt \skp[2]\rep{doorgaans}{veelal}
+gevonden in een canon: een geheel aan kennis en inzichten, aan ordening en
+interpretatie van het verleden. Daaraan dienen we meteen toe te voegen dat een
+dergelijk geheel niet onveranderlijk is. Integendeel, een canon mag en kan niet
+worden gecanoniseerd. Essentieel is juist dat deze voortdurend onderwerp is van
+reflectie. Wie en wat verdienen een plek in de canon en waarom? Micha\"el Zeeman
+zei hierover eens: ``De canon leert geen vaststaande grootheden, de canon
+onderwijst lezen, kijken en luisteren, dat is kritisch oordelen.'' De canon
+nodigt uit tot kritiek, tot aanvulling en in ieder geval tot gebruik.
+
+We hebben geprobeerd\com{a comment without highlighting} een beknopte canon te
+formuleren voor de `Nederlandse' geschiedenis. Bij de samenstelling hebben drie
+criteria een rol gespeeld. Hoe heeft het huidige Nederland zich gevormd? Welk
+politiek-bestuurlijk systeem was in dit \yel{gebied} overheersend? Welke
 ontwikkelingen hebben de Nederlandse samenleving sterk hebben be\"invloed?
 
 Aan deze proeve van een canon zouden we een motto willen meegeven dat aan
-\hilite[fill=red, draw=blue,opacity=.5,line width=3pt]{Willem van Oranje}
-is toegeschreven: `Hoop is niet vereist om ergens aan
-te beginnen, succes niet nodig om te volharden.'
+\hilite[fill=red, draw=blue,opacity=.5,line width=3pt]{Willem van Oranje} is
+toegeschreven: `Hoop is niet vereist om ergens aan te beginnen, succes niet
+nodig om te volharden.'
+
 \end{document}
+vim: syntax=proofread

Modified: trunk/Master/texmf-dist/doc/latex/proofread/proofread.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/proofread/proofread.vmb
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/proofread.vmb	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/proofread/proofread.vmb	2017-03-01 22:29:50 UTC (rev 43370)
@@ -0,0 +1,1298 @@
+" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.
+UseVimball
+finish
+plugin/visPlugin.vim	[[[1
+60
+" vis.vim:
+" Function:	Perform an Ex command on a visual highlighted block (CTRL-V).
+" Date:		May 18, 2010
+" GetLatestVimScripts: 1066 1 cecutil.vim
+" GetLatestVimScripts: 1195 1 :AutoInstall: vis.vim
+" Verse: For am I now seeking the favor of men, or of God? Or am I striving
+" to please men? For if I were still pleasing men, I wouldn't be a servant
+" of Christ. (Gal 1:10, WEB)
+
+" ---------------------------------------------------------------------
+"  Details: {{{1
+" Requires: Requires 6.0 or later  (this script is a plugin)
+"           Requires <cecutil.vim> (see :he vis-required)
+"
+" Usage:    Mark visual block (CTRL-V) or visual character (v),
+"           press ':B ' and enter an Ex command [cmd].
+"
+"           ex. Use ctrl-v to visually mark the block then use
+"                 :B cmd     (will appear as   :'<,'>B cmd )
+"
+"           ex. Use v to visually mark the block then use
+"                 :B cmd     (will appear as   :'<,'>B cmd )
+"
+"           Command-line completion is supported for Ex commands.
+"
+" Note:     There must be a space before the '!' when invoking external shell
+"           commands, eg. ':B !sort'. Otherwise an error is reported.
+"
+" Author:   Charles E. Campbell <NdrchipO at ScampbellPfamily.AbizM> - NOSPAM
+"           Based on idea of Stefan Roemer <roemer at informatik.tu-muenchen.de>
+"
+" ------------------------------------------------------------------------------
+" Initialization: {{{1
+" Exit quickly when <Vis.vim> has already been loaded or
+" when 'compatible' is set
+if &cp
+  finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+" ------------------------------------------------------------------------------
+" Public Interface: {{{1
+"  -range       : VisBlockCmd operates on the range itself
+"  -com=command : Ex command and arguments
+"  -nargs=+     : arguments may be supplied, up to any quantity
+com! -range -nargs=+ -com=command    B  sil <line1>,<line2>call vis#VisBlockCmd(<q-args>)
+com! -range -nargs=* -com=expression S  sil <line1>,<line2>call vis#VisBlockSearch(<q-args>)
+
+" Suggested by Hari --
+if exists("g:vis_WantSlashSlash") && g:vis_WantSlashSlash
+ vn // <esc>/<c-r>=vis#VisBlockSearch()<cr>
+endif
+vn ?? <esc>?<c-r>=vis#VisBlockSearch()<cr>
+
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" ---------------------------------------------------------------------
+"  Modelines: {{{1
+" vim: fdm=marker
+autoload/vis.vim	[[[1
+339
+" vis.vim:
+" Function:	Perform an Ex command on a visual highlighted block (CTRL-V).
+" Version:	21f	 NOT RELEASED
+" Date:		Sep 08, 2016
+" GetLatestVimScripts: 1066 1 cecutil.vim
+" GetLatestVimScripts: 1195 1 :AutoInstall: vis.vim
+" Verse: For am I now seeking the favor of men, or of God? Or am I striving
+" to please men? For if I were still pleasing men, I wouldn't be a servant
+" of Christ. (Gal 1:10, WEB)
+"
+" Author:   Charles E. Campbell <NdrchipO at ScampbellPfamily.AbizM> - NOSPAM
+"           Based on idea of Stefan Roemer <roemer at informatik.tu-muenchen.de>
+"
+" ------------------------------------------------------------------------------
+" Initialization: {{{1
+" Exit quickly when <Vis.vim> has already been loaded or
+" when 'compatible' is set
+if &cp || exists("g:loaded_vis")
+  finish
+endif
+let s:keepcpo    = &cpo
+let g:loaded_vis = "v21fNR"
+set cpo&vim
+"DechoTabOn
+
+" ---------------------------------------------------------------------
+"  Support Functions: {{{1
+" ------------------------------------------------------------------------------
+" vis#VisBlockCmd: {{{2
+fun! vis#VisBlockCmd(cmd) range
+"  call Dfunc("vis#VisBlockCmd(cmd<".a:cmd.">")
+
+  " retain and re-use same visual mode
+  sil! keepj norm `<
+  let curposn = SaveWinPosn(0)
+  let vmode   = visualmode()
+"  call Decho("vmode<".vmode.">")
+
+  call s:SaveUserSettings()
+
+  if vmode == 'V'
+"   call Decho("handling V mode")
+"   call Decho("cmd<".a:cmd.">")
+   exe "keepj '<,'>".a:cmd
+
+  else " handle v and ctrl-v
+"   call Decho("handling v or ctrl-v mode")
+   " Initialize so (begcol < endcol) for non-v modes
+   let begcol   = s:VirtcolM1("<")
+   let endcol   = s:VirtcolM1(">")
+   if vmode != 'v'
+    if begcol > endcol
+     let begcol  = s:VirtcolM1(">")
+     let endcol  = s:VirtcolM1("<")
+    endif
+   endif
+
+   " Initialize so that begline<endline
+   let begline  = a:firstline
+   let endline  = a:lastline
+   if begline > endline
+    let begline = a:lastline
+    let endline = a:firstline
+   endif
+"   call Decho('beg['.begline.','.begcol.'] end['.endline.','.endcol.']')
+
+   " =======================
+   " Modify Selected Region:
+   " =======================
+   " 1. delete selected region into register "a
+"   call Decho("1. delete selected region into register a")
+   sil! keepj norm! gv"ad
+"   call Decho("1. reg-A<". at a.">")
+"   call Recho("Step#1: deleted selected region into register")|redraw!|sleep 3	" Decho
+
+   " 2. put cut-out text at end-of-file
+"   call Decho("2. put cut-out text at end-of-file")
+   keepj $
+   keepj pu_
+   let lastline= line("$")
+   sil! keepj norm! "aP
+"   call Decho("2. reg-A<". at a.">")
+"   call Recho("Step#2: put text at end-of-file")|redraw!|sleep 3	" Decho
+
+   " 3. apply command to those lines
+   let curline = line(".")
+   ka
+   keepj $
+"   call Decho("3. apply command<".a:cmd."> to those lines (curline=".line(".").")")
+   exe "keepj ". curline.',$'.a:cmd
+"   call Recho("Step#3: apply command")|redraw!|sleep 3	" Decho
+
+   " 4. Prepend the "empty_chr" since "ad on empty lines inserts blanks
+   if exists("g:vis_empty_character")
+	let empty_chr= g:vis_empty_character
+   else
+    let empty_chr= (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>"
+   endif
+   " if the command removes the text, then don't do anything with the
+   " non-existent text (for example, :B !true  under unix)
+   if curline <= line("$")
+	exe "keepj sil! ". curline.',$s/^/'.empty_chr.'/'
+"	call Recho("Step#3a: prepend empty-character")|redraw!|sleep 3	" Decho
+
+	" 5. visual-block select the modified text in those lines
+"	call Decho("5. visual-block select modified text at end-of-file")
+	exe "keepj ".lastline
+	exe "keepj norm! 0".vmode."G$\"ad"
+"	call Decho("5. reg-A<". at a.">")
+"	call Recho("Step#5: select modified text")|redraw!|sleep 3	" Decho
+
+	" 6. delete excess lines
+"	call Decho("6. delete excess lines")
+	exe "sil! keepj ".lastline.',$d'
+"	call Recho("Step#6: delete excess lines")|redraw!|sleep 3	" Decho
+
+	" 7. put modified text back into file
+"	call Decho("7. put modifed text back into file (beginning=".begline.".".begcol.")")
+	exe "keepj ".begline
+	if begcol > 1
+	 exe 'sil! keepj norm! '.begcol."\<bar>\"ap"
+	elseif begcol == 1
+	 norm! 0"ap
+	else
+	 norm! 0"aP
+	endif
+"	call Recho("Step#7: put modified text back")|redraw!|sleep 3	" Decho
+   endif
+
+   " 8. attempt to restore gv -- this is limited, it will
+   "    select the same size region in the same place as before,
+   "    not necessarily the changed region
+"   call Decho("8. restore gv")
+   let begcol= begcol+1
+   let endcol= endcol+1
+   exe "sil keepj ".begline
+   exe 'sil keepj norm! '.begcol."\<bar>".vmode
+   exe "sil keepj ".endline
+   exe 'sil keepj norm! '.endcol."\<bar>\<esc>"
+   exe "sil keepj ".begline
+   exe 'sil keepj norm! '.begcol."\<bar>"
+"   call Recho("Step#8: restore gv")|redraw!|sleep 3	" Decho
+
+   " 9. Remove empty-character from text
+"   call Decho("9. remove empty-character from lines ".begline." to ".endline)
+   exe "sil! keepj ".begline.','.endline.'s/'.empty_chr.'//e'
+"   call Recho("Step#9: remove empty-character")|redraw!|sleep 3	" Decho
+  endif
+
+  " restore a-priori condition
+  call s:RestoreUserSettings()
+  call RestoreWinPosn(curposn)
+
+"  call Dret("vis#VisBlockCmd")
+endfun
+
+" ------------------------------------------------------------------------------
+" vis#VisBlockSearch: {{{2
+fun! vis#VisBlockSearch(...) range
+"  call Dfunc("vis#VisBlockSearch() a:0=".a:0." lines[".a:firstline.",".a:lastline."]")
+  let keepic= &ic
+  set noic
+
+  if a:0 >= 1 && strlen(a:1) > 0
+   let pattern   = a:1
+   let s:pattern = pattern
+"   call Decho("a:0=".a:0.": pattern<".pattern.">")
+  elseif exists("s:pattern")
+   let pattern= s:pattern
+  else
+   let pattern   = @/
+   let s:pattern = pattern
+  endif
+  let vmode= visualmode()
+
+  " collect search restrictions
+  let firstline  = line("'<")
+  let lastline   = line("'>")
+  let firstcolm1 = s:VirtcolM1("<")
+  let lastcolm1  = s:VirtcolM1(">")
+"  call Decho("1: firstline=".firstline." lastline=".lastline." firstcolm1=".firstcolm1." lastcolm1=".lastcolm1)
+
+  if(firstline > lastline)
+   let firstline = line("'>")
+   let lastline  = line("'<")
+   if a:0 >= 1
+    keepj norm! `>
+   endif
+  else
+   if a:0 >= 1
+    keepj norm! `<
+   endif
+  endif
+"  call Decho("2: firstline=".firstline." lastline=".lastline." firstcolm1=".firstcolm1." lastcolm1=".lastcolm1)
+
+  if vmode != 'v'
+   if firstcolm1 > lastcolm1
+   	let tmp        = firstcolm1
+   	let firstcolm1 = lastcolm1
+   	let lastcolm1  = tmp
+   endif
+  endif
+"  call Decho("3: firstline=".firstline." lastline=".lastline." firstcolm1=".firstcolm1." lastcolm1=".lastcolm1)
+
+  let firstlinem1 = firstline  - 1
+  let lastlinep1  = lastline   + 1
+  let firstcol    = firstcolm1 + 1
+  let lastcol     = lastcolm1  + 1
+  let lastcolp1   = lastcol    + 1
+"  call Decho("4: firstline=".firstline." lastline=".lastline." firstcolm1=".firstcolm1." lastcolp1=".lastcolp1)
+
+  " construct search string
+  if vmode == 'V'
+   let srch= '\%(\%>'.firstlinem1.'l\%<'.lastlinep1.'l\)\&'
+"   call Decho("V  srch: ".srch)
+  elseif vmode == 'v'
+   if firstline == lastline || firstline == lastlinep1
+   	let srch= '\%(\%'.firstline.'l\%>'.firstcolm1.'v\%<'.lastcolp1.'v\)\&'
+   else
+    let srch= '\%(\%(\%'.firstline.'l\%>'.firstcolm1.'v\)\|\%(\%'.lastline.'l\%<'.lastcolp1.'v\)\|\%(\%>'.firstline.'l\%<'.lastline.'l\)\)\&'
+   endif
+"   call Decho("v  srch: ".srch)
+  else
+   let srch= '\%(\%>'.firstlinem1.'l\%>'.firstcolm1.'v\%<'.lastlinep1.'l\%<'.lastcolp1.'v\)\&'
+"   call Decho("^v srch: ".srch)
+  endif
+
+  " perform search
+  if a:0 <= 1
+"   call Decho("Search forward: <".srch.pattern.">")
+   call search(srch.pattern)
+   let @/= srch.pattern
+
+  elseif a:0 == 2
+"   call Decho("Search backward: <".srch.pattern.">")
+   call search(srch.pattern,a:2)
+   let @/= srch.pattern
+  endif
+
+  " restore ignorecase
+  let &ic= keepic
+
+"  call Dret("vis#VisBlockSearch <".srch.">")
+  return srch
+endfun
+
+" ------------------------------------------------------------------------------
+" s:VirtcolM1: usually a virtcol(mark)-1, but due to tabs this can be different {{{2
+fun! s:VirtcolM1(mark)
+"  call Dfunc('s:VirtcolM1("'.a:mark.'")')
+
+  if virtcol("'".a:mark) <= 1
+"   call Dret("s:VirtcolM1 0")
+   return 0
+  endif
+
+  if &ve == "block"
+   " Works around a ve=all vs ve=block difference with virtcol().
+   " Since s:SaveUserSettings() changes ve to ve=all, this small
+   " ve override only affects vis#VisBlockSearch().
+   set ve=all
+"   call Decho("temporarily setting ve=all")
+  endif
+
+"  call Decho("exe norm! `".a:mark."h")
+  exe "keepj norm! `".a:mark."h"
+
+  let vekeep = &ve
+  let vc     = virtcol(".")
+  let &ve    = vekeep
+
+"  call Dret("s:VirtcolM1 ".vc)
+  return vc
+endfun
+
+" ---------------------------------------------------------------------
+" s:SaveUserSettings: save options which otherwise may interfere {{{2
+fun! s:SaveUserSettings()
+"  call Dfunc("s:SaveUserSettings()")
+  let s:keep_lz    = &lz
+  let s:keep_fen   = &fen
+  let s:keep_fo    = &fo
+  let s:keep_ic    = &ic
+  let s:keep_magic = &magic
+  let s:keep_sol   = &sol
+  let s:keep_ve    = &ve
+  let s:keep_ww    = &ww
+  let s:keep_cedit = &cedit
+  set lz magic nofen noic nosol ww= fo=nroql2 cedit&
+  " determine whether or not "ragged right" is in effect for the selected region
+  let raggedright= 0
+  norm! `>
+  let rrcol = col(".")
+  while line(".") >= line("'<")
+"   call Decho(".line#".line(".").": col(.)=".col('.')." rrcol=".rrcol)
+   if col(".") != rrcol
+    let raggedright = 1
+	break
+   endif
+   if line(".") == 1
+	break
+   endif
+   norm! k
+  endwhile
+  if raggedright
+"   call Decho("ragged right: set ve=all")
+   set ve=all
+  else
+"   call Decho("smooth right: set ve=")
+   set ve=
+  endif
+
+  " Save any contents in register a
+  let s:rega= @a
+
+"  call Dret("s:SaveUserSettings")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreUserSettings: restore register a and options {{{2
+fun! s:RestoreUserSettings()
+"  call Dfunc("s:RestoreUserSettings()")
+  let @a     = s:rega
+  let &cedit = s:keep_cedit
+  let &fen   = s:keep_fen
+  let &fo    = s:keep_fo
+  let &ic    = s:keep_ic
+  let &lz    = s:keep_lz
+  let &sol   = s:keep_sol
+  let &ve    = s:keep_ve
+  let &ww    = s:keep_ww
+"  call Dret("s:RestoreUserSettings")
+endfun
+
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" ------------------------------------------------------------------------------
+"  Modelines: {{{1
+" vim: fdm=marker
+plugin/cecutil.vim	[[[1
+600
+" cecutil.vim : save/restore window position
+"               save/restore mark position
+"               save/restore selected user maps
+"  Author:	Charles E. Campbell
+"  Version:	18j	NOT RELEASED
+"  Date:	Aug 13, 2016
+"
+"  Saving Restoring Destroying Marks: {{{1
+"       call SaveMark(markname)       let savemark= SaveMark(markname)
+"       call RestoreMark(markname)    call RestoreMark(savemark)
+"       call DestroyMark(markname)
+"       commands: SM RM DM
+"
+"  Saving Restoring Destroying Window Position: {{{1
+"       call SaveWinPosn()        let winposn= SaveWinPosn()
+"       call RestoreWinPosn()     call RestoreWinPosn(winposn)
+"		\swp : save current window/buffer's position
+"		\rwp : restore current window/buffer's previous position
+"       commands: SWP RWP
+"
+"  Saving And Restoring User Maps: {{{1
+"       call SaveUserMaps(mapmode,maplead,mapchx,suffix)
+"       call RestoreUserMaps(suffix)
+"
+" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
+"
+" You believe that God is one. You do well. The demons also {{{1
+" believe, and shudder. But do you want to know, vain man, that
+" faith apart from works is dead?  (James 2:19,20 WEB)
+"redraw!|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+
+" ---------------------------------------------------------------------
+" Load Once: {{{1
+if &cp || exists("g:loaded_cecutil")
+ finish
+endif
+let g:loaded_cecutil = "v18jNR"
+let s:keepcpo        = &cpo
+set cpo&vim
+"if exists("g:loaded_Decho")  " Decho
+" DechoRemOn
+"endif  " Decho
+
+" =======================
+"  Public Interface: {{{1
+" =======================
+
+" ---------------------------------------------------------------------
+"  Map Interface: {{{2
+if !hasmapto('<Plug>SaveWinPosn')
+ map <unique> <Leader>swp <Plug>SaveWinPosn
+endif
+if !hasmapto('<Plug>RestoreWinPosn')
+ map <unique> <Leader>rwp <Plug>RestoreWinPosn
+endif
+nmap <silent> <Plug>SaveWinPosn		:call SaveWinPosn()<CR>
+nmap <silent> <Plug>RestoreWinPosn	:call RestoreWinPosn()<CR>
+
+" ---------------------------------------------------------------------
+" Command Interface: {{{2
+com! -bar -nargs=0 SWP	call SaveWinPosn()
+com! -bar -nargs=? RWP	call RestoreWinPosn(<args>)
+com! -bar -nargs=1 SM	call SaveMark(<q-args>)
+com! -bar -nargs=1 RM	call RestoreMark(<q-args>)
+com! -bar -nargs=1 DM	call DestroyMark(<q-args>)
+
+com! -bar -nargs=1 WLR	call s:WinLineRestore(<q-args>)
+
+if v:version < 630
+ let s:modifier= "sil! "
+else
+ let s:modifier= "sil! keepj "
+endif
+
+" ===============
+" Functions: {{{1
+" ===============
+
+" ---------------------------------------------------------------------
+" SaveWinPosn: {{{2
+"    let winposn= SaveWinPosn()  will save window position in winposn variable
+"    call SaveWinPosn()          will save window position in b:cecutil_winposn{b:cecutil_iwinposn}
+"    let winposn= SaveWinPosn(0) will *only* save window position in winposn variable (no stacking done)
+fun! SaveWinPosn(...)
+  let savedposn= winsaveview()
+  if a:0 == 0
+   if !exists("b:cecutil_iwinposn")
+    let b:cecutil_iwinposn= 1
+   else
+    let b:cecutil_iwinposn= b:cecutil_iwinposn + 1
+   endif
+"   echomsg "Decho: saving posn to SWP stack"
+   let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn
+  endif
+  return savedposn
+""  echomsg "Decho: SaveWinPosn() a:0=".a:0
+"  if line("$") == 1 && getline(1) == ""
+""   echomsg "Decho: SaveWinPosn : empty buffer"
+"   return ""
+"  endif
+"  let so_keep   = &l:so
+"  let siso_keep = &siso
+"  let ss_keep   = &l:ss
+"  setlocal so=0 siso=0 ss=0
+
+"  let swline = line(".")                           " save-window line in file
+"  let swcol  = col(".")                            " save-window column in file
+"  if swcol >= col("$")
+"   let swcol= swcol + virtcol(".") - virtcol("$")  " adjust for virtual edit (cursor past end-of-line)
+"  endif
+"  let swwline   = winline() - 1                    " save-window window line
+"  let swwcol    = virtcol(".") - wincol()          " save-window window column
+"  let savedposn = ""
+""  echomsg "Decho: sw[".swline.",".swcol."] sww[".swwline.",".swwcol."]"
+"  let savedposn = "call GoWinbufnr(".winbufnr(0).")"
+"  let savedposn = savedposn."|".s:modifier.swline
+"  let savedposn = savedposn."|".s:modifier."norm! 0z\<cr>"
+"  if swwline > 0
+"   let savedposn= savedposn.":".s:modifier."call s:WinLineRestore(".(swwline+1).")\<cr>"
+"  endif
+"  if swwcol > 0
+"   let savedposn= savedposn.":".s:modifier."norm! 0".swwcol."zl\<cr>"
+"  endif
+"  let savedposn = savedposn.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
+
+"  " save window position in
+"  " b:cecutil_winposn_{iwinposn} (stack)
+"  " only when SaveWinPosn() is used
+"  if a:0 == 0
+"   if !exists("b:cecutil_iwinposn")
+"    let b:cecutil_iwinposn= 1
+"   else
+"    let b:cecutil_iwinposn= b:cecutil_iwinposn + 1
+"   endif
+""   echomsg "Decho: saving posn to SWP stack"
+"   let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn
+"  endif
+
+"  let &l:so = so_keep
+"  let &siso = siso_keep
+"  let &l:ss = ss_keep
+
+""  if exists("b:cecutil_iwinposn")                                                                  " Decho
+""   echomsg "Decho: b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]"
+""  else                                                                                             " Decho
+""   echomsg "Decho: b:cecutil_iwinposn doesn't exist"
+""  endif                                                                                            " Decho
+""  echomsg "Decho: SaveWinPosn [".savedposn."]"
+"  return savedposn
+endfun
+
+" ---------------------------------------------------------------------
+" RestoreWinPosn: {{{2
+"      call RestoreWinPosn()
+"      call RestoreWinPosn(winposn)
+fun! RestoreWinPosn(...)
+  if line("$") == 1 && getline(1) == ""
+   return ""
+  endif
+  if a:0 == 0 || type(a:1) != 4
+   " use saved window position in b:cecutil_winposn{b:cecutil_iwinposn} if it exists
+   if exists("b:cecutil_iwinposn") && exists("b:cecutil_winposn{b:cecutil_iwinposn}")
+    try
+	 call winrestview(b:cecutil_winposn{b:cecutil_iwinposn})
+    catch /^Vim\%((\a\+)\)\=:E749/
+     " ignore empty buffer error messages
+    endtry
+    " normally drop top-of-stack by one
+    " but while new top-of-stack doesn't exist
+    " drop top-of-stack index by one again
+    if b:cecutil_iwinposn >= 1
+     unlet b:cecutil_winposn{b:cecutil_iwinposn}
+     let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
+     while b:cecutil_iwinposn >= 1 && !exists("b:cecutil_winposn{b:cecutil_iwinposn}")
+      let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
+     endwhile
+     if b:cecutil_iwinposn < 1
+      unlet b:cecutil_iwinposn
+     endif
+    endif
+   else
+    echohl WarningMsg
+    echomsg "***warning*** need to SaveWinPosn first!"
+    echohl None
+   endif
+
+  else	 " handle input argument
+"   echomsg "Decho: using input a:1<".a:1.">"
+   " use window position passed to this function
+   call winrestview(a:1)
+   " remove a:1 pattern from b:cecutil_winposn{b:cecutil_iwinposn} stack
+   if exists("b:cecutil_iwinposn")
+    let jwinposn= b:cecutil_iwinposn
+    while jwinposn >= 1                     " search for a:1 in iwinposn..1
+     if exists("b:cecutil_winposn{jwinposn}")    " if it exists
+      if a:1 == b:cecutil_winposn{jwinposn}      " and the pattern matches
+       unlet b:cecutil_winposn{jwinposn}            " unlet it
+       if jwinposn == b:cecutil_iwinposn            " if at top-of-stack
+        let b:cecutil_iwinposn= b:cecutil_iwinposn - 1      " drop stacktop by one
+       endif
+      endif
+     endif
+     let jwinposn= jwinposn - 1
+    endwhile
+   endif
+  endif
+
+""  echomsg "Decho: RestoreWinPosn() a:0=".a:0
+""  echomsg "Decho: getline(1)<".getline(1).">"
+""  echomsg "Decho: line(.)=".line(".")
+"  if line("$") == 1 && getline(1) == ""
+""   echomsg "Decho: RestoreWinPosn : empty buffer"
+"   return ""
+"  endif
+"  let so_keep   = &l:so
+"  let siso_keep = &l:siso
+"  let ss_keep   = &l:ss
+"  setlocal so=0 siso=0 ss=0
+
+"  if a:0 == 0 || a:1 == ""
+"   " use saved window position in b:cecutil_winposn{b:cecutil_iwinposn} if it exists
+"   if exists("b:cecutil_iwinposn") && exists("b:cecutil_winposn{b:cecutil_iwinposn}")
+""    echomsg "Decho: using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">"
+"    try
+"     exe s:modifier.b:cecutil_winposn{b:cecutil_iwinposn}
+"    catch /^Vim\%((\a\+)\)\=:E749/
+"     " ignore empty buffer error messages
+"    endtry
+"    " normally drop top-of-stack by one
+"    " but while new top-of-stack doesn't exist
+"    " drop top-of-stack index by one again
+"    if b:cecutil_iwinposn >= 1
+"     unlet b:cecutil_winposn{b:cecutil_iwinposn}
+"     let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
+"     while b:cecutil_iwinposn >= 1 && !exists("b:cecutil_winposn{b:cecutil_iwinposn}")
+"      let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
+"     endwhile
+"     if b:cecutil_iwinposn < 1
+"      unlet b:cecutil_iwinposn
+"     endif
+"    endif
+"   else
+"    echohl WarningMsg
+"    echomsg "***warning*** need to SaveWinPosn first!"
+"    echohl None
+"   endif
+
+"  else	 " handle input argument
+""   echomsg "Decho: using input a:1<".a:1.">"
+"   " use window position passed to this function
+"   exe a:1
+"   " remove a:1 pattern from b:cecutil_winposn{b:cecutil_iwinposn} stack
+"   if exists("b:cecutil_iwinposn")
+"    let jwinposn= b:cecutil_iwinposn
+"    while jwinposn >= 1                     " search for a:1 in iwinposn..1
+"     if exists("b:cecutil_winposn{jwinposn}")    " if it exists
+"      if a:1 == b:cecutil_winposn{jwinposn}      " and the pattern matches
+"       unlet b:cecutil_winposn{jwinposn}            " unlet it
+"       if jwinposn == b:cecutil_iwinposn            " if at top-of-stack
+"        let b:cecutil_iwinposn= b:cecutil_iwinposn - 1      " drop stacktop by one
+"       endif
+"      endif
+"     endif
+"     let jwinposn= jwinposn - 1
+"    endwhile
+"   endif
+"  endif
+
+"  " Seems to be something odd: vertical motions after RWP
+"  " cause jump to first column.  The following fixes that.
+"  " Note: was using wincol()>1, but with signs, a cursor
+"  " at column 1 yields wincol()==3.  Beeping ensued.
+"  let vekeep= &ve
+"  set ve=all
+"  if virtcol('.') > 1
+"   exe s:modifier."norm! hl"
+"  elseif virtcol(".") < virtcol("$")
+"   exe s:modifier."norm! lh"
+"  endif
+"  let &ve= vekeep
+
+"  let &l:so   = so_keep
+"  let &l:siso = siso_keep
+"  let &l:ss   = ss_keep
+
+""  echomsg "Decho: RestoreWinPosn"
+endfun
+
+" ---------------------------------------------------------------------
+" s:WinLineRestore: {{{2
+fun! s:WinLineRestore(swwline)
+"  echomsg "Decho: s:WinLineRestore(swwline=".a:swwline.")"
+  while winline() < a:swwline
+   let curwinline= winline()
+   exe s:modifier."norm! \<c-y>"
+   if curwinline == winline()
+	break
+   endif
+  endwhile
+"  echomsg "Decho: s:WinLineRestore"
+endfun
+
+" ---------------------------------------------------------------------
+" GoWinbufnr: go to window holding given buffer (by number) {{{2
+"   Prefers current window; if its buffer number doesn't match,
+"   then will try from topleft to bottom right
+fun! GoWinbufnr(bufnum)
+"  call Dfunc("GoWinbufnr(".a:bufnum.")")
+  if winbufnr(0) == a:bufnum
+"   call Dret("GoWinbufnr : winbufnr(0)==a:bufnum")
+   return
+  endif
+  winc t
+  let first=1
+  while winbufnr(0) != a:bufnum && (first || winnr() != 1)
+  	winc w
+	let first= 0
+   endwhile
+"  call Dret("GoWinbufnr")
+endfun
+
+" ---------------------------------------------------------------------
+" SaveMark: sets up a string saving a mark position. {{{2
+"           For example, SaveMark("a")
+"           Also sets up a global variable, g:savemark_{markname}
+fun! SaveMark(markname)
+"  call Dfunc("SaveMark(markname<".string(a:markname).">)")
+  let markname= a:markname
+  if strpart(markname,0,1) !~ '\a'
+   let markname= strpart(markname,1,1)
+  endif
+"  call Decho("markname=".string(markname))
+
+  let lzkeep  = &lz
+  set lz
+
+  if 1 <= line("'".markname) && line("'".markname) <= line("$")
+   let winposn               = SaveWinPosn(0)
+   exe s:modifier."norm! `".markname
+   let savemark              = SaveWinPosn(0)
+   let g:savemark_{markname} = savemark
+   let savemark              = markname.string(savemark)
+   call RestoreWinPosn(winposn)
+  else
+   let g:savemark_{markname} = ""
+   let savemark              = ""
+  endif
+
+  let &lz= lzkeep
+
+"  call Dret("SaveMark : savemark<".savemark.">")
+  return savemark
+endfun
+
+" ---------------------------------------------------------------------
+" RestoreMark: {{{2
+"   call RestoreMark("a")  -or- call RestoreMark(savemark)
+fun! RestoreMark(markname)
+"  call Dfunc("RestoreMark(markname<".a:markname.">)")
+
+  if strlen(a:markname) <= 0
+"   call Dret("RestoreMark : no such mark")
+   return
+  endif
+  let markname= strpart(a:markname,0,1)
+  if markname !~ '\a'
+   " handles 'a -> a styles
+   let markname= strpart(a:markname,1,1)
+  endif
+"  call Decho("markname=".markname." strlen(a:markname)=".strlen(a:markname))
+
+  let lzkeep  = &lz
+  set lz
+  let winposn = SaveWinPosn(0)
+
+  if strlen(a:markname) <= 2
+   if exists("g:savemark_{markname}")
+	" use global variable g:savemark_{markname}
+"	call Decho("use savemark list")
+	call RestoreWinPosn(g:savemark_{markname})
+	exe "norm! m".markname
+   endif
+  else
+   " markname is a savemark command (string)
+"	call Decho("use savemark command")
+   let markcmd= strpart(a:markname,1)
+   call RestoreWinPosn(markcmd)
+   exe "norm! m".markname
+  endif
+
+  call RestoreWinPosn(winposn)
+  let &lz       = lzkeep
+
+"  call Dret("RestoreMark")
+endfun
+
+" ---------------------------------------------------------------------
+" DestroyMark: {{{2
+"   call DestroyMark("a")  -- destroys mark
+fun! DestroyMark(markname)
+"  call Dfunc("DestroyMark(markname<".a:markname.">)")
+
+  " save options and set to standard values
+  let reportkeep= &report
+  let lzkeep    = &lz
+  set lz report=10000
+
+  let markname= strpart(a:markname,0,1)
+  if markname !~ '\a'
+   " handles 'a -> a styles
+   let markname= strpart(a:markname,1,1)
+  endif
+"  call Decho("markname=".markname)
+
+  let curmod  = &mod
+  let winposn = SaveWinPosn(0)
+  1
+  let lineone = getline(".")
+  exe "k".markname
+  d
+  put! =lineone
+  let &mod    = curmod
+  call RestoreWinPosn(winposn)
+
+  " restore options to user settings
+  let &report = reportkeep
+  let &lz     = lzkeep
+
+"  call Dret("DestroyMark")
+endfun
+
+" ---------------------------------------------------------------------
+" QArgSplitter: to avoid \ processing by <f-args>, <q-args> is needed. {{{2
+" However, <q-args> doesn't split at all, so this one returns a list
+" with splits at all whitespace (only!), plus a leading length-of-list.
+" The resulting list:  qarglist[0] corresponds to a:0
+"                      qarglist[i] corresponds to a:{i}
+fun! QArgSplitter(qarg)
+"  call Dfunc("QArgSplitter(qarg<".a:qarg.">)")
+  let qarglist    = split(a:qarg)
+  let qarglistlen = len(qarglist)
+  let qarglist    = insert(qarglist,qarglistlen)
+"  call Dret("QArgSplitter ".string(qarglist))
+  return qarglist
+endfun
+
+" ---------------------------------------------------------------------
+" ListWinPosn: {{{2
+"fun! ListWinPosn()                                                        " Decho 
+"  if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0             " Decho 
+"   call Decho("nothing on SWP stack")                                     " Decho
+"  else                                                                    " Decho
+"   let jwinposn= b:cecutil_iwinposn                                       " Decho 
+"   while jwinposn >= 1                                                    " Decho 
+"    if exists("b:cecutil_winposn{jwinposn}")                              " Decho 
+"     call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho 
+"    else                                                                  " Decho 
+"     call Decho("winposn{".jwinposn."} -- doesn't exist")                 " Decho 
+"    endif                                                                 " Decho 
+"    let jwinposn= jwinposn - 1                                            " Decho 
+"   endwhile                                                               " Decho 
+"  endif                                                                   " Decho
+"endfun                                                                    " Decho 
+"com! -nargs=0 LWP	call ListWinPosn()                                    " Decho 
+
+" ---------------------------------------------------------------------
+" SaveUserMaps: this function sets up a script-variable (s:restoremap) {{{2
+"          which can be used to restore user maps later with
+"          call RestoreUserMaps()
+"
+"          mapmode - see :help maparg for details (n v o i c l "")
+"                    ex. "n" = Normal
+"                    The letters "b" and "u" are optional prefixes;
+"                    The "u" means that the map will also be unmapped
+"                    The "b" means that the map has a <buffer> qualifier
+"                    ex. "un"  = Normal + unmapping
+"                    ex. "bn"  = Normal + <buffer>
+"                    ex. "bun" = Normal + <buffer> + unmapping
+"                    ex. "ubn" = Normal + <buffer> + unmapping
+"          maplead - see mapchx
+"          mapchx  - "<something>" handled as a single map item.
+"                    ex. "<left>"
+"                  - "string" a string of single letters which are actually
+"                    multiple two-letter maps (using the maplead:
+"                    maplead . each_character_in_string)
+"                    ex. maplead="\" and mapchx="abc" saves user mappings for
+"                        \a, \b, and \c
+"                    Of course, if maplead is "", then for mapchx="abc",
+"                    mappings for a, b, and c are saved.
+"                  - :something  handled as a single map item, w/o the ":"
+"                    ex.  mapchx= ":abc" will save a mapping for "abc"
+"          suffix  - a string unique to your plugin
+"                    ex.  suffix= "DrawIt"
+fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
+"  call Dfunc("SaveUserMaps(mapmode<".a:mapmode."> maplead<".a:maplead."> mapchx<".a:mapchx."> suffix<".a:suffix.">)")
+
+  if !exists("s:restoremap_{a:suffix}")
+   " initialize restoremap_suffix to null string
+   let s:restoremap_{a:suffix}= ""
+  endif
+
+  " set up dounmap: if 1, then save and unmap  (a:mapmode leads with a "u")
+  "                 if 0, save only
+  let mapmode  = a:mapmode
+  let dounmap  = 0
+  let dobuffer = ""
+  while mapmode =~# '^[bu]'
+   if     mapmode =~# '^u'
+    let dounmap = 1
+    let mapmode = strpart(a:mapmode,1)
+   elseif mapmode =~# '^b'
+    let dobuffer = "<buffer> "
+    let mapmode  = strpart(a:mapmode,1)
+   endif
+  endwhile
+"  call Decho("dounmap=".dounmap."  dobuffer<".dobuffer.">")
+ 
+  " save single map :...something...
+  if strpart(a:mapchx,0,1) == ':'
+"   call Decho("save single map :...something...")
+   let amap= strpart(a:mapchx,1)
+   if amap == "|" || amap == "\<c-v>"
+    let amap= "\<c-v>".amap
+   endif
+   let amap                    = a:maplead.amap
+   let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:sil! ".mapmode."unmap ".dobuffer.amap
+   if maparg(amap,mapmode) != ""
+    let maprhs                  = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+	let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:".mapmode."map ".dobuffer.amap." ".maprhs
+   endif
+   if dounmap
+	exe "sil! ".mapmode."unmap ".dobuffer.amap
+   endif
+ 
+  " save single map <something>
+  elseif strpart(a:mapchx,0,1) == '<'
+"   call Decho("save single map <something>")
+   let amap       = a:mapchx
+   if amap == "|" || amap == "\<c-v>"
+    let amap= "\<c-v>".amap
+"	call Decho("amap[[".amap."]]")
+   endif
+   let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap
+   if maparg(a:mapchx,mapmode) != ""
+    let maprhs                  = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+	let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
+   endif
+   if dounmap
+	exe "sil! ".mapmode."unmap ".dobuffer.amap
+   endif
+ 
+  " save multiple maps
+  else
+"   call Decho("save multiple maps")
+   let i= 1
+   while i <= strlen(a:mapchx)
+    let amap= a:maplead.strpart(a:mapchx,i-1,1)
+	if amap == "|" || amap == "\<c-v>"
+	 let amap= "\<c-v>".amap
+	endif
+	let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap
+    if maparg(amap,mapmode) != ""
+     let maprhs                  = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+	 let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
+    endif
+	if dounmap
+	 exe "sil! ".mapmode."unmap ".dobuffer.amap
+	endif
+    let i= i + 1
+   endwhile
+  endif
+"  call Dret("SaveUserMaps : s:restoremap_".a:suffix.": ".s:restoremap_{a:suffix})
+endfun
+
+" ---------------------------------------------------------------------
+" RestoreUserMaps: {{{2
+"   Used to restore user maps saved by SaveUserMaps()
+fun! RestoreUserMaps(suffix)
+"  call Dfunc("RestoreUserMaps(suffix<".a:suffix.">)")
+  if exists("s:restoremap_{a:suffix}")
+   let s:restoremap_{a:suffix}= substitute(s:restoremap_{a:suffix},'|\s*$','','e')
+   if s:restoremap_{a:suffix} != ""
+"   	call Decho("exe ".s:restoremap_{a:suffix})
+    exe "sil! ".s:restoremap_{a:suffix}
+   endif
+   unlet s:restoremap_{a:suffix}
+  endif
+"  call Dret("RestoreUserMaps")
+endfun
+
+" ==============
+"  Restore: {{{1
+" ==============
+let &cpo= s:keepcpo
+unlet s:keepcpo
+
+" ================
+"  Modelines: {{{1
+" ================
+" vim: ts=4 fdm=marker
+doc/vis.txt	[[[1
+247
+*vis.txt*	The Visual Block Tool				Sep 07, 2016
+
+Author:  Charles E. Campbell  <NdrchipO at ScampbellPfamily.AbizM>
+	  (remove NOSPAM from Campbell's email first)
+Copyright: (c) 2004-2016 by Charles E. Campbell	*vis-copyright*
+           The VIM LICENSE applies to vis.vim and vis.txt
+           (see |copyright|) except use "vis" instead of "Vim"
+	   No warranty, express or implied.  Use At-Your-Own-Risk.
+
+
+==============================================================================
+1. Contents					*vis* *vis-contents* *vis.vim*
+
+	1. Contents......................: |vis-contents|
+	2. Visual Block Manual...........: |vis-manual|
+	3. Visual Block Search...........: |vis-srch|
+	4. Required......................: |vis-required|
+	5. Sorting Examples..............: |vis-sort|
+	6. History.......................: |vis-history|
+
+
+==============================================================================
+2. Visual Block Manual			*visman* *vismanual* *vis-manual* *v_:B*
+
+	Performs an arbitrary Ex command on a visual highlighted block.
+
+	Mark visual block (CTRL-V) or visual character (v),
+		press ':B ' and enter an Ex command [cmd].
+
+		ex. Use ctrl-v to visually mark the block then use
+			:B cmd     (will appear as   :'<,'>B cmd )
+
+		ex. Use v to visually mark the block then use
+			:B cmd     (will appear as   :'<,'>B cmd )
+
+	Command-line completion is supported for Ex commands.
+
+	There must be a space before the '!' when invoking external shell
+	commands, eg. ':B !sort'. Otherwise an error is reported.
+
+	The script works by deleting the selected region into register "a.
+	The register "a itself is first saved and later restored.  The text is
+	then put at the end-of-file, modified by the user command, and then
+	deleted back into register "a.  Any excess lines are removed, and the
+	modified text is then put back into the text at its original
+	location.
+
+	Popular uses for this command include: >
+
+	  :B s/pattern/output/
+	  :B left
+	  :B right
+<
+	1: apply a substitute command to just the selected visual block,
+	2: left justify the selected block, and
+	3: right justify the selected block, respectively.
+
+	The concept for this plugin is originally Stefan Roemer's
+	<roemer at informatik.tu-muenchen.de>; however, both the implementation
+	and methods used internally have completely changed since Roemer's
+	version.
+
+	*g:vis_empty_character* : this character should not appear in your
+	text.  By default: users of euc-jp will get a 0x01, otherwise
+	it wil be a 0xff.  Used to prevent an empty result in the
+	moving back the modified text operation, which otherwise results
+	in an unwanted extra blank space being inserted.
+
+
+==============================================================================
+3. Visual Block Search				*vis-search* *vis-srch* *vis-S*
+
+	Visual block search provides two ways to get visual-selection
+	based searches.  Both these methods work well with :set hls
+	and searching may be repeated with the n or N commands.
+
+	Using // and ?? after a visual selection (the // is only available
+	if you have g:vis_WantSlashSlash=1 in your <.vimrc> file):
+>
+		ex. select region via V, v, or ctrl-v
+		    //pattern
+<
+	You'll actually get a long leader string of commands to restrict
+	searches to the requested visual block first.  You may then enter
+	the pattern afterwards.  For example, using "v" to select this
+	paragraph, you'll see something like: >
+
+		/\%(\%(\%80l\%>12v\)\|\%(\%83l\%<53v\)\|\%(\%>80l\%<83l\)\)\&
+<
+	You may enter whatever pattern you want after the \&, and the
+	pattern search will be restricted to the requested region.
+
+	The "S" command in visual mode:
+>
+		ex. select region via V, v, or ctrl-v
+		    :S pattern
+<
+	    The ":S pattern" will appear as ":'<,'>S pattern".  This
+	    command will move the cursor to the next instance of the
+	    pattern, restricted to the visually selected block.
+
+	An "R" command was contemplated, but I currently see no way to
+	get it to continue to search backwards with n and N commands.
+
+
+==============================================================================
+4. Required							*vis-required*
+
+	The latest <vis.vim> (v20f or later) now requires vim 7.0 (or later),
+	as it has been split into plugin/ and an autoload/ sections for
+	on-demand loading.
+
+	Starting with version 11, <vis.vim> required <cecutil.vim>.  It uses
+	the SaveWinPosn() and RestoreWinPosn() functions therein.  You may get
+	<cecutil.vim> from
+
+		http://www.drchip.org/astronaut/vim/index.html#CECUTIL
+
+
+==============================================================================
+5. Sorting Examples						*vis-sort*
+
+	Assume we start with the following three lines: >
+
+    	    one   two   three
+    	    four  five  six
+    	    seven eight nine
+<
+	Example 1: Use visual-block mode to select the center three
+	words: ctrl-v select two/five/eight, then :'<,'>sort: >
+
+    	    four  five  six
+    	    one   two   three
+    	    seven eight nine
+<
+	Note that the visual-block is ignored, other than as a way to
+	select the three lines.  The resulting sorting is done on the
+	three words "one/four/seven".
+
+	(this example presumed that you're using vim 7.0; if you're using
+	an earlier version vim, try  :'<,\> !sort  instead)
+
+	Example 2: Using vis.vim's B command:
+	Again, use visual-block mode to select the center
+	three words: ctrl-v select two/five/eight, then :'<,'>B sort: >
+
+    	    one   eight three
+    	    four  five  six
+    	    seven two   nine
+<
+	This operation sorts the selected three words (two/five/eight),
+	leaving all characters outside the visual block alone.
+
+	(this example presumed that you're using vim 7.0; if you're using
+	an earlier version vim, try  :'<,\> !sort  instead)
+
+	Example 3: Using vissort.vim's Vissort() function
+	Use visual block mode to select the center three words;
+	ctrl-v select two/five/eight, then :'<,'>Vissort: >
+
+    	    seven eight nine
+    	    four  five  six
+    	    one   two   three
+<
+	This time, the entire lines are sorted, but the sorting is done
+	based on the visual-block selected region (ie. two/five/eight).
+
+
+==============================================================================
+6. History						*vis-history* {{{1
+
+    v21 : Apr 01, 2013	- visual block and ragged right detection; there was
+			  a conflict between using ve= and ve=all
+			  (internally); one was good for ragged right and
+			  the other for smooth right visual block selections.
+			  I found a way to detect ragged right vs smooth right
+			  and so vis.vim now works properly in both
+			  situations.
+	  Apr 02, 2013	- The detection method above hung when on line 1.
+			  Fixed.
+	  Jan 15, 2015	- Small adjustment to prevent a leading space from
+	  		  being inserted.
+	  Feb 10, 2016  - (Stefan Siegal) provided a patch making
+			  visPlugin.vim restore cpo
+	  Sep 07, 2016	- addressed an empty-string bug : if the block
+	  		  command causes an empty string to appear in the
+			  modified text, vim would insert a blank rather than
+			  do nothing.  Fixed by prepending an
+			  "empty-character" and then removing it
+    v20 : May 20, 2009	- cecutil bugfix
+	  May 19, 2010	- split into plugin/ and autoload/ for faster
+			  loading and on-demand loading.
+	  Mar 18, 2013	- (Gary Johnson) pointed out that changing
+			  cedit to <Esc> caused problems with visincr;
+			  the cedit setting is now bypassed in vis, too.
+	  Mar 29, 2013	- Fixed a problem with vis#VisBlockCmd() where it
+	  		  missed substitutes due to a short last line.
+			  s:SaveUserSettings() now makes ve=all instead of
+			  ve=  (see |'ve'|)
+    v19 : Jan 06, 2006	- small modification included to allow AlignMaps
+			  maps to work (visual select, :B norm \somemap)
+			- cecutil updated to use keepjumps
+	  Jan 24, 2006	- works around formatoption setting
+	  Jan 25, 2006	- uses SaveWinPosn(0) to avoid SWP stack use
+    v18 : Jul 11, 2005	- vis.vim now works around a virtcol() behavior
+			  difference between ve=all vs ve=block
+    v17 : Apr 25, 2005	- vis.vim now uses cecutil (SaveWinPosn, etc) so the
+			  tarball now includes a copy of cecutil.vim
+    v16 : Feb 02, 2005	- fixed a bug with visual-block + S ; the first line
+			  was being omitted in the search
+	  Mar 01, 2005	- <q-args> used instead of '<args>'
+	  Apr 13, 2005	- :'<,'>S plus v had a bug with one or two line
+			  selections (tnx to Vigil for pointing this out)
+	  Apr 14, 2005	- set ignorecase caused visual-block searching
+			  to confuse visual modes "v" and "V"
+    v15 : Feb 01, 2005	- includes some additions to the help
+    v14 : Sep 28, 2004	- visual-block based searching now supported.  One
+			  do this either with :'<,'>S pattern or with a / or ?
+	  Jan 31, 2005	- fixed help file
+    v13 : Jul 16, 2004	- folding commands added to source
+			- GetLatestVimScript hook added for automatic updating
+    v12 : Jun 14, 2004	- bugfix (folding interfered)
+    v11 : May 18, 2004	- Included calls to SaveWinPosn() and RestoreWinPosn()
+			  to prevent unwanted movement of the cursor and window.
+			  As a result, <vis.vim> now requires <cecutil.vim>
+			  (see |vis-required|).
+    v10 : Feb 11, 2003	- bugfix (ignorecase option interfered with v)
+     v9 : Sep 10, 2002	- bugfix (left Decho on, now commented out)
+     v8 : Sep 09, 2002	- bugfix (first column problem)
+     v7 : Sep 05, 2002	- bugfix (was forcing begcol<endcol for "v" mode)
+     v6 : Jun 25, 2002	- bugfix (VirtcolM1 instead of virtcol()-1)
+     v5 : Jun 21, 2002	- now supports character-visual mode (v) and
+			  linewise-visual mode (V)
+     v4 : Jun 20, 2002	- saves sol, sets nosol, restores sol
+			- bugfix: 0 inserted: 0\<c-v>G$\"ad
+			- Fixed double-loading (was commented
+			  out for debugging purposes)
+     v3 : Jun 20, 2002	- saves ve, unsets ve, restores ve
+     v2 : June 19, 2002	- Charles Campbell's <vis.vim>
+     v?   June 19, 2002	  Complete rewrite - <vis.vim> is now immune to
+			  the presence of tabs and is considerably faster.
+     v1 Epoch		- Stefan Roemer <roemer at informatik.tu-muenchen.de>
+			  wrote the original <vis.vim>.
+
+==============================================================================
+Modelines: {{{1
+vim:tw=78:ts=8:ft=help:fdm=marker
+syntax/proofread.vim	[[[1
+17
+" escape sequences for package proofread.sty
+map <Esc>d s\del{}<Esc>hp
+map <Esc>y s\yel[]{}<Esc>PF[li
+map <Esc>a a\add{}<Esc>i
+map <Esc>i i\add{}<Esc>i
+map <Esc>r s\rep{}{}<Esc>2F{plla
+map <Esc>c a\com{}<Esc>i
+map <Esc>n /\\\(add\\|del\\|com\\|hilite\\|rep\\|yel\)<Enter>//e<Enter>h
+map <Esc>u ?\\\(\(\(hilite\\|yel\)\(\[[^\]]*\]\)\{0,1}\)\\|\(rep{\_[^}]\{-}}\)\\|\(com\\|del\\|add\)\){\_.\{-}}<Enter>m`v//e<Enter>:B !proofread undo<Enter>0f→xXx``
+map <Esc>h ?\\\(\(\(hilite\\|yel\)\(\[[^\]]*\]\)\{0,1}\)\\|\(rep{\_[^}]\{-}}\)\\|\(com\\|del\\|add\)\){\_.\{-}}<Enter>m`v//e<Enter>:B !proofread honor<Enter>0f→xXx``
+
+"          ?\\\(\(\(hilite\\|yel\)\(\[[^\]]*\]\)\{0,1}\)\\|\(rep{\_[^}]*}\)\\|\(com\\|del\\|add\)\){\_[^}]*}           ^                                     ^     ^
+"              < < <--hilite/yel-> <--[...]---->       >    <--\rep{...}-->    <--com/del/add---> ><--{...}-->         |                                     |     |
+"              | |_____________________________________|                                          |        save position           remove ruby scripts' marker     back to position
+"              |__________________________________________________________________________________|
+
+set syntax=tex
+../bin/proofread	[[[1
+20
+#!/usr/bin/env ruby
+# coding: utf-8
+buffer = STDIN.readlines.map { |v| v.strip }.join('→')
+if ARGV[0] == 'undo'
+  print buffer.
+    sub(/\\del{(.*)}/, '\1').
+    sub(/\\com{.*}/, '').
+    sub(/\\add{.*}/, '').
+    sub(/\\rep{(.*)}{.*}/, '\1').
+    sub(/\\(yel|hilite)(\[.*\])*{(.*)}/, '\3').
+    tr('→', "\n")
+else
+  print buffer.
+    sub(/\\del{(.*)}/, '').
+    sub(/\\com{.*}/, '').
+    sub(/\\add{(.*)}/, '\1').
+    sub(/\\rep{.*}{(.*)}/, '\1').
+    sub(/\\(yel|hilite)(\[.*\])*{(.*)}/, '\3').
+    tr('→', "\n")
+end

Deleted: trunk/Master/texmf-dist/doc/latex/proofread/vimrc
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proofread/vimrc	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/doc/latex/proofread/vimrc	2017-03-01 22:29:50 UTC (rev 43370)
@@ -1,6 +0,0 @@
-" escape sequences for package proofread.sty
-map <Esc>d s\del{}<Esc>hp
-map <Esc>y s\yel[]{}<Esc>PF[li
-map <Esc>a a\add{}<Esc>i
-map <Esc>r s\rep{}{}<Esc>2F{plla
-map <Esc>c a\com{}<Esc>i

Modified: trunk/Master/texmf-dist/source/latex/proofread/proofread.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/proofread/proofread.dtx	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/source/latex/proofread/proofread.dtx	2017-03-01 22:29:50 UTC (rev 43370)
@@ -17,11 +17,10 @@
 when you proofread a latex document. These allow you to easily highlight
 text and add comments in the margin. Vim escape sequences are provided
 for inserting these LaTeX commands in the source. The package is based
-on code for a text highlighting command that was published by Antal S-Z
-in http://tex.stackexchange.com/questions/5959.
-The main file, proofread.dtx, is self-extracting, so you can generate the
-style file by compiling proofread.dtx with pdflatex.
-
+on code for a text highlighting command that was published by Antal
+Spector-Zabusky in http://tex.stackexchange.com/questions/5959. The main file,
+proofread.dtx, is self-extracting, so you can generate the style file by
+compiling proofread.dtx with pdflatex.
 %</readme>
 %<*internal>
 \fi
@@ -45,7 +44,7 @@
 \endpreamble
 \postamble
 
-Copyright (C) 2015 by Wybo Dekker <wybo at dekkerdocumenten.nl>
+Copyright (C) 2017 by Wybo Dekker <wybo at dekkerdocumenten.nl>
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License (LPPL), either
@@ -96,7 +95,7 @@
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{proofread}
 %<*package>
-    [2015/12/07 v1.01 Commands for inserting annotations]
+    [2017/02/28 v1.02 Commands for inserting annotations]
 %</package>
 %<*driver>
 \documentclass{ltxdoc}
@@ -117,13 +116,15 @@
 % \fi
 %
 % \GetFileInfo{\jobname.dtx}
-% \DoNotIndex{\newcommand, \DeclareRobustCommand, \RequirePackage, \add,
-%   \advance, \begin, \bgroup, \coordinate, \def, \del, \discretionary,
-%   \egroup, \end, \endinput, \endpgfextra, \fi, \fill, \footnotesize,
-%   \global, \hbox, \hilite, \ifdef, \ifdim, \marginpar, \marginparmargin,
-%   \marginparpush, \mbox, \newbox, \newcount, \newdimen, \p, \path,
-%   \pgfextra, \rep, \sbox, \st, \the, \tikz, \tikzset, \usebox,
-%   \usetikzlibrary, \y, \yel
+% \DoNotIndex{\AtBeginDocument, \DeclareOption, \DeclareRobustCommand,
+% \DoubleSpacing, \OnehalfSpacing, \PackageError, \ProcessOptions,
+% \RequirePackage, \advance, \baselineskip, \begin, \bgroup, \coordinate, \def,
+% \discretionary, \egroup, \else, \end, \endinput, \endpgfextra, \fi, \fill,
+% \footnotesize, \global, \hbox, \hilite, \ifdef, \ifdim, \ifx, \let, \marginpar,
+% \marginparmargin, \marginparpush, \mbox, \newbox, \newcommand, \newcount,
+% \newdimen, \newif, \p, \path, \pgfextra, \raggedright, \renewcommand, \sbox,
+% \setSpacing, \setstretch, \st, \the, \tikz, \tikzset, \undefined, \usebox,
+% \usetikzlibrary,\y,
 % }
 %
 %\title{\textsf{proofread} --- Commands for inserting annotations\thanks{This file
@@ -136,82 +137,92 @@
 %
 %\changes{v1.00}{2015/09/06}{First public release}
 %\changes{v1.01}{2015/12/07}{running counter was sometimes not advanced}
+%\changes{v1.02}{2017/02/28}{- Now works in tables, footnotes, minipages and more\\
+%                            - package options frame, corrected, uncorrected added\\
+%                            - package options doublespacing, onehalfspacing added\\
+%                            - skp command for manual moving down marginnotes\\
+%                            - vim commands are provided for removing notes,\\
+%                              either honoring or undoing the correction.
+% }
 %
 % \begin{abstract}\noindent
-% The |proofread| package defines a few \LaTeX\ commands that are useful
-% when you proofread a latex document. These allow you to easily highlight
-% text and add comments in the margin. Vim escape sequences are provided
-% for inserting these \LaTeX\ commands in the source. The package is based
-% on code for a text highlighting command that was published by Antal S-Z
-% in \href{http://tex.stackexchange.com/questions/5959}{StackExchange}.
+% The |proofread| package defines a few \LaTeX\ commands that are useful when
+% you proofread a latex document. These allow you to easily highlight text and
+% add comments in the margin. Vim escape sequences are provided for inserting or
+% removing these \LaTeX\ commands in the source. The package is based on code
+% for a text highlighting command that was published by Antal Spector-Zabusky in
+% \href{http://tex.stackexchange.com/questions/5959}{StackExchange}.
+% 
+% Options are provided for displaying the document with extra line spacing,
+% and for display of it in either uncorrected or corrected state, both
+% without margin notes.
 % \end{abstract}
 %
 % \section{Usage}
 % The commands described below display a highlighted phrase in your
 % compiled document and place a comment in the margin, prefixed with a
-% counter, which is indicated with \textit{n} in the following. This
+% counter, which is indicated with |n| in the following. This
 % counter is useful in the communication with the author of the document.
 %
+% Previous versions of this package used the standard \LaTeX\ |\marginpar| to
+% create notes in the margin. However, although these will not overwrite each
+% other, they can not be used in tables, minipages, footnotes and more.
+% Therefore, this version creates margin notes using the |marginnote| package,
+% in order to make them work in tables, minipages, footnotes and more. This
+% implies that margin notes are placed at the vertical position where they are
+% called, instead of being automatically stacked. So if several notes are
+% generated on the same line, they overwrite each other. You can prevent this by
+% \DescribeMacro{skp}
+% prefixing the second note on the line with |\skp| or |\skp[1]|, the third note
+% with |\skp[2]| and so on. Multiline notes may need larger numbers.
+%
+% The following supposes that you have installed vim-facilities as
+% described in section~\ref{inst} (``Installing the Vim commands'').
+%
 % \DescribeMacro{\del}
-% |\del{phrase}| displays \del{phrase} and places \textit{n}:Delete in the
+% |\del{phrase}| displays \del{phrase} and places |n: delete| in the
 % margin. In the |vim| editor, you can generate this code by selecting the
-% phrase and typing |<escape>d| if you add the following line to your
-% |.vimrc| file:\footnote{If you made sequences or commands for your own
-% editor, please inform the author; he will include those in this
-% document.}
-%
-% |map <Esc>d s\del{}<Esc>hp|
-%
-% After typing this escape sequence, you will be in normal mode, behind the
-% closing brace.
-% 
+% \DescribeMacro{esc d}
+% phrase and typing |<escape>d|. After typing this escape sequence, you
+% will be in normal mode, behind the closing brace.
 % \DescribeMacro{\yel}
 % |\yel[comment]{phrase}| displays \yel{phrase} and places
-% \textit{n}:comment in the margin. In the |vim| editor, you can generate
-% this code by selecting the phrase and typing |<escape>y| if you add the
-% following line to your |.vimrc| file:
-% 
-% |map <Esc>y s\yel[]{}<Esc>PF[li|
-%
+% |n: comment| in the margin. In the |vim| editor, you can generate
+% \DescribeMacro{esc y}
+% this code by selecting the phrase and typing |<escape>y|.
 % After typing this escape sequence, you will be in insert mode between the
 % square bracket pair, ready to insert the \textit{comment}.
 %
 % \DescribeMacro{\add}
-% |\add{phrase}| displays \add{phrase} and places \textit{n}:Add in the
-% margin. In the |vim| editor, you can generate this code by typing
-% |<escape>a| if you add the following line to your |.vimrc| file:
-% 
-% |map <Esc>a a\add{}<Esc>i|
+% |\add{phrase}| displays \add{phrase} and places |n: add| in the
+% margin. In the |vim| editor, you can generate this code \emph{after} the
+% \DescribeMacro{esc a}
+% current cursor position by typing |<escape>a|, or \emph{before} the cursor
+% \DescribeMacro{esc i}
+% position with |<escape>i|.  After typing these escape sequences, you will
+% be in insert mode between the braces pair, ready to type what should be
+% added. 
 %
-% After typing this escape sequence, you will be in insert mode between the
-% braces pair, ready to type what should be added.
-%
 % \DescribeMacro{\rep}
 % |\rep{phrase}{replacement}| displays \rep{phrase}{replacement} and places
-% \textit{n}:was:phrase in the margin. In the |vim| editor, you can
-% generate this code by selecting the phrase and typing |<escape>r| if you
-% add the following line to your |.vimrc| file:
+% |n: was: phrase| in the margin. In the |vim| editor, you can
+% \DescribeMacro{esc r}
+% generate this code by selecting the phrase and typing |<escape>r|.
+% After typing this escape sequence, you will be in insert mode between
+% the second pair of braces, ready to insert the new content.
 %
-% |map <Esc>r s\rep{}{}<Esc>2F{plla|
-%
-%  After typing this escape sequence, you will be in normal mode between
-%  the second pair of braces, ready to edit the new content.
-%
 % \DescribeMacro{\com}
 % |\com{comment}| is used by |\del|, |\yel|, |\add|, and |\rep| to place
-% \textit{n}:comment in the margin. You can use it to place comment in the
+% |n: comment| in the margin. You can use it to place comment in the
 % margin without text highlighting. In the |vim| editor, you can insert the 
-% command by typing |<escape>c| if you  add the following line to your
-% |.vimrc| file:
-% 
-% |map <Esc>c a\com{}<Esc>i|
-%
+% \DescribeMacro{esc c}
+% command by typing |<escape>c|.
 % After typing this escape sequence, you will be in insert mode between the
 % braces pair, ready to type your comment.
 %
 % \DescribeMacro{\hilite}
 % |\hilite[options]{phrase}| is the command on which the above commands are
-% based. It was published by Antal S-Z in
+% based. It was published by Antal Spector-Zabusky in
 % \href{http://tex.stackexchange.com/questions/5959}{StackExchange}.
 % It highlights the phrase with the default colour, yellow, using the
 % default fill opacity, 0.25; but using the options, you can change this.
@@ -226,8 +237,68 @@
 % each individually with the |fill opacity| and |draw opacity| options.
 % See the documentation of the tikz package for more options. 
 %
+% \section{Installing the Vim commands}\label{inst}
+% The |proofread| distribution comes with a Vimball archive named
+% |proofread.vmb|. Edit that file in vim and run the command: |:so %|. This will
+% install the necessary files in your |~/.vim| directory, plus the Ruby executable
+% |proofread| in your |~/bin| directory. The latter should be in your |PATH| of
+% course, and you'll have to set its executable flag (|chmod +x ~/bin/proofread|).
+% Finally, in order to use these facilities, you'll have to add this line
+% at the end of your Latex source: |% vim: syntax=proofread|.
+%
+% The majority of the escape commands that are installed by this
+% procedure have been described above. However, there are two others:
+% \DescribeMacro{esc u}
+% The vim sequence |<escape>u| will \emph{undo} the nearest of the three
+% letter commands (|\del, \add, \yel, \rep, \com|) described above, which
+% starts \emph{before} the current cursor position (which may be even on
+% the first character after the starting |\|).  So if it sees
+% |\del{something}| it will replace that with |something|, and if it sees
+% |\add{something}| it will remove that. 
+%
+% \DescribeMacro{esc h}
+% The counterpart is the |<escape>h| sequence, which will \emph{honor} the
+% first command found before the cursor. If it sees |\del{something}| it will
+% remove it, and if it sees |\add{something}| it will replace it with
+% |something|.
+% The following table illustrates what happens with these two escape
+% sequences:
+% 
+% \begin{tabular}{@{}lll@{}}
+%                 		&after |<escape>u|&after |<escape>h|	\\
+% |\del{something}| 		& something 	  &  			\\
+% |\add{something}| 		& 		  &something 		\\
+% |\yel{something}| 		&something 	  &something 		\\
+% |\yel[remark]{something}|	&something 	  &something 		\\
+% |\com{something}| 		& 		  & 			\\
+% |\rep{old}{new}|  		&old  		  &new  		\\
+% \end{tabular}
+% 
+% As you see, both sequences simply undo |\yel| and |\com| commands, because
+% they are comments, not corrections.
+%
+% \section{Package options}
+% Options are provided, displaying the document in various spacing and
+% correction modes.
+% \DescribeMacro{onehalfspacing}
+% The |onehalfspacing| option displays the document with 1.5 times the
+% normal line spacing, 
+% \DescribeMacro{doublespacing}
+% The |doublespacing| option displays the document with doubled
+% line spacing.
+% \DescribeMacro{uncorrected}
+% The |uncorrected| displays the document in its uncorrected state, without
+% notes in the margin.
+% \DescribeMacro{corrected}
+% The |corrected| displays the document in its corrected state, without
+% notes in the margin.
+% \DescribeMacro{frame}
+% Finally, the |frame| option is provided for visually handicapped users; 
+% it causes .5pt black borders to be drawn around the colored backgrounds
+% around \hilite[draw=black,line width=.5pt]{marked} texts. 
 %\StopEventually{^^A
 %  \PrintChanges
+%  \clearpage
 %  \PrintIndex
 %}
 %
@@ -236,19 +307,53 @@
 %    \begin{macrocode}
 %<*package>
 %    \end{macrocode}
-
+% Option handling:
+% For the |onehalfspacing| and |doublespacing| options we need the setspace
+% package, but the memoir class has its own version for this. So if
+% |\DoubleSpacing| is defined, we redefined the other commands needed.
+% The |PR at spaced| remembers if margin notes need a shift up.
+%    \begin{macrocode}
+\RequirePackage{marginnote}
+\ifx\undefined\DoubleSpacing
+  \RequirePackage{setspace}
+\else
+  \let\setstretch\setSpacing
+  \let\onehalfspacing\OnehalfSpacing
+  \let\doublespacing\DoubleSpacing
+\fi
+\newif\ifPR at spaced\PR at spacedfalse
+\newdimen\PR at unit\PR at unit.6\baselineskip
+\DeclareOption{onehalfspacing}{\onehalfspacing\PR at spacedtrue\PR at unit.525\baselineskip}
+\DeclareOption{doublespacing}{\doublespacing\PR at spacedtrue\PR at unit.35\baselineskip}
+%    \end{macrocode}
+% The default is to show corrections; the |corrected| and |uncorrected|
+% options will show the document without those in either corrected of
+% uncorrected state. 
+%    \begin{macrocode}
+\newif\ifPR at corrected\PR at correctedfalse
+\newif\ifPR at uncorrected\PR at uncorrectedfalse
+\DeclareOption{corrected}{\PR at correctedtrue}
+\DeclareOption{uncorrected}{\PR at uncorrectedtrue}
+%    \end{macrocode}
+% The frame option draws a black 0.5pt frame around colored areas for 
+% the visually disabled.
+%    \begin{macrocode}
+\newif\ifPR at frame\PR at framefalse
+\newdimen\PR at lw\PR at lw=0pt
+\DeclareOption{frame}{\PR at lw=.5pt\PR at frametrue}
+\ProcessOptions
+%    \end{macrocode}
 % The following code for a text highlighting command (here renamed to
-% |\hilite| was published by Antal S-Z in
+% |\hilite| was published by Antal Spector-Zabusky in
 % \href{http://tex.stackexchange.com/questions/5959}{StackExchange}.
 %    \begin{macrocode}
 \RequirePackage{soul}
 \RequirePackage{tikz}
-\RequirePackage{etoolbox}
 \usetikzlibrary{calc}
 \usetikzlibrary{decorations.pathmorphing}
 
 \newcommand{\PR at defhiliter}[3][]{%
-  \tikzset{every hiliter/.style={color=#2, fill opacity=#3, #1}}%
+  \tikzset{every hiliter/.style={fill=#2,fill opacity=#3, #1}}%
 }
 
 \PR at defhiliter{yellow}{.25}
@@ -275,7 +380,11 @@
 % \begin{macro}{\hilite}
 %    \begin{macrocode}
 \DeclareRobustCommand*\hilite[1][]{%
-  \tikzset{this hiliter/.style={#1}}%
+  \ifPR at frame%
+    \tikzset{this hiliter/.style={#1,draw=black,line width=\PR at lw}}%
+  \else%
+    \tikzset{this hiliter/.style={#1}}%
+  \fi
   \SOUL at setup
   %
   \def\SOUL at preamble{%
@@ -335,8 +444,8 @@
 % Reduce minimum vertical space between margin paragraphs; if the memoir
 % class is active, use the outer margin:
 %    \begin{macrocode}
-\AtEndPreamble{\marginparpush2pt}
-\ifdef{\marginparmargin}{\marginparmargin{outer}}{}
+\AtBeginDocument{\marginparpush2pt}
+\ifx\undefined\marginparmargin\else\marginparmargin{outer}\fi
 %    \end{macrocode}
 % We need a save box and a counter for prefixing the margin paragraphs:
 %    \begin{macrocode}
@@ -344,18 +453,29 @@
 \newcount\PR at markerno\PR at markerno=1
 %    \end{macrocode}
 % \begin{macro}{\com}
-% Make a margin paragraph, in footnote fontsize, prefixed with the counter
+% Make a raggedright margin note, in footnote fontsize, prefixed with the counter
 % plus a colon:
 %    \begin{macrocode}
 \newcommand{\com}[1]{%
-  \marginpar{%
+  \marginnote{%
+    \setstretch{1}%
+    \raggedright%
     \footnotesize%
-    \the\PR at markerno:#1%
-  }%
+    \the\PR at markerno: #1%
+  }[\PR at skip]%
+  \global\PR at skip0pt
   \global\advance\PR at markerno1%
 }
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\skp}
+%    \begin{macrocode}
+\newdimen\PR at skip\PR at skip0\PR at unit
+\newcommand{\skp}[1][1]{%
+ \PR at skip#1\PR at unit%
+}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\del}
 %    \begin{macrocode}
 \newcommand{\del}[1]{%
@@ -362,16 +482,14 @@
   \com{delete}%
   \sbox\PR at soulbox{\st{#1}}%
   \hilite[red]{{\usebox\PR at soulbox}}%
-  \bgroup\egroup%
 }
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\yel}
 %    \begin{macrocode}
-\newcommand{\yel}[2][\mbox{}]{%
+\newcommand{\yel}[2][]{%
   \com{#1}%
-  \hilite[yellow]{#2}%
-  \bgroup\egroup%
+  \hilite{#2}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -379,8 +497,7 @@
 %    \begin{macrocode}
 \newcommand{\add}[1]{%
   \com{add}%
-  \hilite[green,draw=blue]{#1}%
-  \bgroup\egroup%
+  \hilite[green]{#1}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -387,10 +504,26 @@
 % \begin{macro}{\rep}
 %    \begin{macrocode}
 \newcommand{\rep}[2]{%
-  \com{was:#1}%
+  \com{was: #1}%
   \hilite[blue]{#2}%
-  \bgroup\egroup%
 }
+%    \end{macrocode}
+% If one of the |corrected| or |uncorrected| options is used, redefine the
+% above commands accordingly:
+%    \begin{macrocode}
+\ifPR at uncorrected
+  \ifPR at corrected
+    \PackageError{proofread}{You may not use both the corrected and uncorrected options}
+  \fi
+  \def\com#1{} \def\add#1{} \def\del#1{#1} \def\rep#1#2{#1}
+  \renewcommand{\yel}[2][]{#2}\renewcommand{\hilite}[2][]{#2}
+\else
+  \ifPR at corrected
+    \def\com#1{} \def\add#1{#1} \def\del#1{} \def\rep#1#2{#2}
+    \renewcommand{\yel}[2][]{#2}\renewcommand{\hilite}[2][]{#2}
+  \fi
+\fi
+
 \endinput
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/proofread/proofread.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/proofread/proofread.ins	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/source/latex/proofread/proofread.ins	2017-03-01 22:29:50 UTC (rev 43370)
@@ -26,7 +26,7 @@
 \endpreamble
 \postamble
 
-Copyright (C) 2015 by Wybo Dekker <wybo at dekkerdocumenten.nl>
+Copyright (C) 2017 by Wybo Dekker <wybo at dekkerdocumenten.nl>
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License (LPPL), either
@@ -52,7 +52,7 @@
 }
 \endbatchfile
 %% 
-%% Copyright (C) 2015 by Wybo Dekker <wybo at dekkerdocumenten.nl>
+%% Copyright (C) 2017 by Wybo Dekker <wybo at dekkerdocumenten.nl>
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License (LPPL), either

Modified: trunk/Master/texmf-dist/tex/latex/proofread/proofread.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proofread/proofread.sty	2017-03-01 22:29:34 UTC (rev 43369)
+++ trunk/Master/texmf-dist/tex/latex/proofread/proofread.sty	2017-03-01 22:29:50 UTC (rev 43370)
@@ -14,16 +14,34 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{proofread}
-    [2015/12/07 v1.01 Commands for inserting annotations]
-
+    [2017/02/28 v1.02 Commands for inserting annotations]
+\RequirePackage{marginnote}
+\ifx\undefined\DoubleSpacing
+  \RequirePackage{setspace}
+\else
+  \let\setstretch\setSpacing
+  \let\onehalfspacing\OnehalfSpacing
+  \let\doublespacing\DoubleSpacing
+\fi
+\newif\ifPR at spaced\PR at spacedfalse
+\newdimen\PR at unit\PR at unit.6\baselineskip
+\DeclareOption{onehalfspacing}{\onehalfspacing\PR at spacedtrue\PR at unit.525\baselineskip}
+\DeclareOption{doublespacing}{\doublespacing\PR at spacedtrue\PR at unit.35\baselineskip}
+\newif\ifPR at corrected\PR at correctedfalse
+\newif\ifPR at uncorrected\PR at uncorrectedfalse
+\DeclareOption{corrected}{\PR at correctedtrue}
+\DeclareOption{uncorrected}{\PR at uncorrectedtrue}
+\newif\ifPR at frame\PR at framefalse
+\newdimen\PR at lw\PR at lw=0pt
+\DeclareOption{frame}{\PR at lw=.5pt\PR at frametrue}
+\ProcessOptions
 \RequirePackage{soul}
 \RequirePackage{tikz}
-\RequirePackage{etoolbox}
 \usetikzlibrary{calc}
 \usetikzlibrary{decorations.pathmorphing}
 
 \newcommand{\PR at defhiliter}[3][]{%
-  \tikzset{every hiliter/.style={color=#2, fill opacity=#3, #1}}%
+  \tikzset{every hiliter/.style={fill=#2,fill opacity=#3, #1}}%
 }
 
 \PR at defhiliter{yellow}{.25}
@@ -47,7 +65,11 @@
 \newdimen\PR at hilite@current
 
 \DeclareRobustCommand*\hilite[1][]{%
-  \tikzset{this hiliter/.style={#1}}%
+  \ifPR at frame%
+    \tikzset{this hiliter/.style={#1,draw=black,line width=\PR at lw}}%
+  \else%
+    \tikzset{this hiliter/.style={#1}}%
+  \fi
   \SOUL at setup
   %
   \def\SOUL at preamble{%
@@ -102,40 +124,56 @@
   }%
   \SOUL@
 }
-\AtEndPreamble{\marginparpush2pt}
-\ifdef{\marginparmargin}{\marginparmargin{outer}}{}
+\AtBeginDocument{\marginparpush2pt}
+\ifx\undefined\marginparmargin\else\marginparmargin{outer}\fi
 \newbox\PR at soulbox
 \newcount\PR at markerno\PR at markerno=1
 \newcommand{\com}[1]{%
-  \marginpar{%
+  \marginnote{%
+    \setstretch{1}%
+    \raggedright%
     \footnotesize%
-    \the\PR at markerno:#1%
-  }%
+    \the\PR at markerno: #1%
+  }[\PR at skip]%
+  \global\PR at skip0pt
   \global\advance\PR at markerno1%
 }
+\newdimen\PR at skip\PR at skip0\PR at unit
+\newcommand{\skp}[1][1]{%
+ \PR at skip#1\PR at unit%
+}
 \newcommand{\del}[1]{%
   \com{delete}%
   \sbox\PR at soulbox{\st{#1}}%
   \hilite[red]{{\usebox\PR at soulbox}}%
-  \bgroup\egroup%
 }
-\newcommand{\yel}[2][\mbox{}]{%
+\newcommand{\yel}[2][]{%
   \com{#1}%
-  \hilite[yellow]{#2}%
-  \bgroup\egroup%
+  \hilite{#2}%
 }
 \newcommand{\add}[1]{%
   \com{add}%
-  \hilite[green,draw=blue]{#1}%
-  \bgroup\egroup%
+  \hilite[green]{#1}%
 }
 \newcommand{\rep}[2]{%
-  \com{was:#1}%
+  \com{was: #1}%
   \hilite[blue]{#2}%
-  \bgroup\egroup%
 }
+\ifPR at uncorrected
+  \ifPR at corrected
+    \PackageError{proofread}{You may not use both the corrected and uncorrected options}
+  \fi
+  \def\com#1{} \def\add#1{} \def\del#1{#1} \def\rep#1#2{#1}
+  \renewcommand{\yel}[2][]{#2}\renewcommand{\hilite}[2][]{#2}
+\else
+  \ifPR at corrected
+    \def\com#1{} \def\add#1{#1} \def\del#1{} \def\rep#1#2{#2}
+    \renewcommand{\yel}[2][]{#2}\renewcommand{\hilite}[2][]{#2}
+  \fi
+\fi
+
 %% 
-%% Copyright (C) 2015 by Wybo Dekker <wybo at dekkerdocumenten.nl>
+%% Copyright (C) 2017 by Wybo Dekker <wybo at dekkerdocumenten.nl>
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License (LPPL), either



More information about the tex-live-commits mailing list