summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-12 21:52:06 +0000
committerKarl Berry <karl@freefriends.org>2018-09-12 21:52:06 +0000
commit438247783b0c69b215c163605b2898510758a7b3 (patch)
tree4edaa4d6f94addee84bec3eb6628487285c9880e /Master/texmf-dist/tex
parent9f77349705405326ec1ea45018f96ae19f77447a (diff)
widows-and-orphans (12sep18)
git-svn-id: svn://tug.org/texlive/trunk@48649 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/widows-and-orphans/widows-and-orphans.sty247
1 files changed, 247 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/widows-and-orphans/widows-and-orphans.sty b/Master/texmf-dist/tex/latex/widows-and-orphans/widows-and-orphans.sty
new file mode 100644
index 00000000000..f77e5480de3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/widows-and-orphans/widows-and-orphans.sty
@@ -0,0 +1,247 @@
+%%
+%% This is file `widows-and-orphans.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% widows-and-orphans.dtx
+%%
+%% This is a generated file.
+%%
+%% Copyright 2017-2018 Frank Mittelbach
+%%
+%%
+%% This file was generated from file(s) of the LaTeX windows-and-orphans 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
+%% https://www.latex-project.org/lppl/
+%% 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
+%% windows-and-orphans Bundle. You may however distribute the Bundle
+%% without such generated files.
+%%
+%%
+%% File: widows-and-orphans.dtx (C) Copyright 2017-2018 Frank Mittelbach
+
+
+\NeedsTeXFormat{LaTeX2e} \RequirePackage{xparse,l3keys2e}
+\ProvidesExplPackage{widows-and-orphans}{2018/09/01}{v1.0a}
+ {Detecting widows and orphans (FMi)}
+\tl_put_left:Nn \@makecol { \__fmwao_test_for_widows_etc: }
+\bool_new:N \g__fmwao_gen_warn_bool
+\bool_gset_true:N \g__fmwao_gen_warn_bool
+\cs_new:Npn \__fmwao_test_for_widows_etc: {
+ \int_case:nnF { \outputpenalty - \interlinepenalty }
+ {
+ { \widowpenalty }
+ { \__fmwao_problem_identified:nn{widow}{Widow} }
+ { \displaywidowpenalty }
+ { \__fmwao_problem_identified:nn{widow}{Display~ widow} }
+ { \clubpenalty }
+ { \__fmwao_problem_identified:n{orphan} }
+ { \clubpenalty + \widowpenalty }
+ { \__fmwao_problem_identified:nn{orphan-widow}{} }
+ { \clubpenalty + \displaywidowpenalty }
+ { \__fmwao_problem_identified:nn{orphan-widow}{display} }
+ { \brokenpenalty }
+ { \__fmwao_problem_identified:n{hyphen} }
+ { \brokenpenalty + \widowpenalty }
+ { \__fmwao_problem_identified:nn{widow}{Widow} }
+ { \brokenpenalty + \displaywidowpenalty }
+ { \__fmwao_problem_identified:nn{widow}{Display~ widow} }
+ { \brokenpenalty + \clubpenalty }
+ { \__fmwao_problem_identified:n{orphan} }
+ { \brokenpenalty + \clubpenalty + \widowpenalty }
+ { \__fmwao_problem_identified:nn{orphan-widow}{} }
+ { \brokenpenalty + \clubpenalty + \displaywidowpenalty }
+ { \__fmwao_problem_identified:nn{orphan-widow}{display} }
+ { \predisplaypenalty - \interlinepenalty }
+ { \__fmwao_problem_identified:nn{widow}{Lonely~ display} }
+ }
+ { \bool_if:NF \g__fmwao_gen_warn_bool
+ { \msg_error:nn{widows-and-orphans}{no-problem} } }
+ \bool_gset_true:N \g__fmwao_gen_warn_bool
+}
+
+\cs_new:Npn \__fmwao_problem_identified:n #1 {
+ \bool_if:NT \g__fmwao_gen_warn_bool
+ { \msg_warning:nn{widows-and-orphans}{#1} }
+}
+\cs_new:Npn \__fmwao_problem_identified:nn #1 #2 {
+ \bool_if:NT \g__fmwao_gen_warn_bool
+ { \msg_warning:nnn{widows-and-orphans}{#1}{#2} }
+}
+
+\cs_new:Npn \__fmwao_this_page: { \__fmwao_some_page:n \c@page }
+\cs_new:Npn \__fmwao_next_page: { \__fmwao_some_page:n { \c@page + 1 } }
+
+\cs_new:Npn \__fmwao_some_page:n #1 {
+ \cs_if_eq:NNTF \thepage \__fmwao_roman_thepage:
+ { \int_to_roman:n } { \int_to_arabic:n }
+ { #1 }
+}
+\cs_new_nopar:Npn \__fmwao_roman_thepage: {\csname @roman\endcsname \c@page}
+
+\prg_new_conditional:Npnn \legacy_switch_if:n #1 {p, T , F , TF }
+ { \exp_args:Nc\if_meaning:w { if#1 } \iftrue \prg_return_true:
+ \else: \prg_return_false: \fi: }
+\msg_new:nnnn {widows-and-orphans} {no-problem}
+ { No~ problem~ to~ suppress~ on~ this~ page! }
+ { Suppression~ of~ a~ widow~ or~ orphan~ problem~ was~ requested~
+ but~ on~ the~ current~ page~ there~ doesn't~ seem~ to~ be~ any.~
+ Maybe~ the~ text~ was~ changed~ and~ the~ request~ should~ get~
+ (re)moved?}
+\msg_new:nnnn {widows-and-orphans} {orphan}
+ { Orphan~ on~ page~ \__fmwao_this_page:
+ \legacy_switch_if:nT {@twocolumn}
+ { \space ( \legacy_switch_if:nTF {@firstcolumn}
+ { first~ } { (second~ } column) }
+ }
+ { Check~ out~ the~ page~ and~ see~ if~ you~ can~ avoid~ the~ orphan.}
+\msg_new:nnnn {widows-and-orphans} {hyphen}
+ { Hyphen~ in~ last~ line~ of~ page~ \__fmwao_this_page:
+ \legacy_switch_if:nT {@twocolumn}
+ { \space ( \legacy_switch_if:nTF {@firstcolumn}
+ { first~ } { (second~ } column) } }
+ { Check~ out~ the~ page~ and~ see~ if~ you~ can~ get~
+ a~ better~ line~ break. }
+\msg_new:nnnn {widows-and-orphans} {widow}
+ { #1~ on~ page~
+ \legacy_switch_if:nTF {@twocolumn}
+ { \legacy_switch_if:nTF {@firstcolumn}
+ { \__fmwao_this_page: \space (second~ }
+ { \__fmwao_next_page: \space (first~ }
+ column)
+ }
+ { \__fmwao_next_page: }
+ }
+ { Check~ out~ the~ page~ and~ see~ if~ you~ can~ avoid~ the~ widow.}
+\msg_new:nnnn {widows-and-orphans} {orphan-widow}
+ { Orphan~
+ \legacy_switch_if:nTF {@twocolumn}
+ { \legacy_switch_if:nTF {@firstcolumn}
+ { and~ #1 widow~ on~ page~ \__fmwao_this_page: \space
+ (first~ and~ second~ }
+ { on~ page~ \__fmwao_this_page: \space (second~ column)~
+ and~ #1 widow~ on~ page~ \__fmwao_next_page: \space (first~ }
+ }
+ { on~ page~ \__fmwao_this_page: \space (second~ column)~
+ and~ #1 widow~ on~ page~ \__fmwao_next_page: \space (first~ }
+ column)
+ }
+ { Check~ out~ the~ page~ and~ see~ if~ you~ can~ avoid~ both~
+ orphan~ and~ widow.}
+
+\prop_new:N \l__fmwao_penalties_prop
+\cs_new:Npn \__fmwao_initialize: {
+ \prop_clear:N \l__fmwao_penalties_prop
+ \prop_put:Nnn \l__fmwao_penalties_prop {10000} {break~ at~ glue}
+ \__fmwao_decide_penalty:Nn \@lowpenalty { \@lowpenalty}
+ \__fmwao_decide_penalty:Nn \@medpenalty { \@medpenalty}
+ \__fmwao_decide_penalty:Nn \@highpenalty { \@highpenalty}
+ \__fmwao_decide_penalty:Nn \clubpenalty
+ { \clubpenalty + \interlinepenalty }
+ \__fmwao_decide_penalty:Nn \widowpenalty
+ { \widowpenalty + \interlinepenalty ,
+ \widowpenalty + \clubpenalty + \interlinepenalty }
+
+ \__fmwao_decide_penalty:Nn \displaywidowpenalty
+ { \displaywidowpenalty + \interlinepenalty ,
+ \displaywidowpenalty + \clubpenalty + \interlinepenalty }
+ \__fmwao_decide_penalty:Nn \brokenpenalty
+ { \brokenpenalty + \interlinepenalty ,
+ \brokenpenalty + \clubpenalty + \interlinepenalty ,
+ \brokenpenalty + \widowpenalty + \interlinepenalty ,
+ \brokenpenalty + \widowpenalty + \clubpenalty + \interlinepenalty ,
+ \brokenpenalty + \displaywidowpenalty + \clubpenalty
+ + \interlinepenalty }
+ \__fmwao_decide_penalty:Nn \predisplaypenalty { \predisplaypenalty }
+}
+\int_new:N \l__fmwao_tmp_int
+\tl_new:N \l__fmwao_tmp_tl
+\bool_new:N \l__fmwao_success_bool
+\cs_new:Npn \__fmwao_decide_penalty:Nn #1 #2 {
+ \bool_set_false:N \l__fmwao_success_bool
+ \bool_do_until:Nn \l__fmwao_success_bool
+ {
+ \bool_set_true:N \l__fmwao_success_bool
+ \clist_map_inline:nn { #2 }
+ { \int_set:Nn \l__fmwao_tmp_int {##1}
+ \prop_get:NVNT
+ \l__fmwao_penalties_prop \l__fmwao_tmp_int \l__fmwao_tmp_tl
+ { \clist_map_break:n {\bool_set_false:N\l__fmwao_success_bool} }
+ }
+ \bool_if:NTF \l__fmwao_success_bool
+ { \clist_map_inline:nn { #2 }
+ { \int_set:Nn \l__fmwao_tmp_int {##1}
+ \prop_put:NVn \l__fmwao_penalties_prop \l__fmwao_tmp_int {##1}
+ }
+ }
+ { \int_incr:N #1 }
+ }
+}
+\AtBeginDocument { \__fmwao_initialize: }
+\keys_define:nn {fmwao} {
+ ,check .choice:
+ ,check / error
+ .code:n = \msg_redirect_module:nnn {widows-and-orphans}{warning}{error}
+ ,check / info
+ .code:n = \msg_redirect_module:nnn {widows-and-orphans}{warning}{info}
+ ,check / none
+ .code:n = \msg_redirect_module:nnn {widows-and-orphans}{warning}{none}
+ ,check / warning
+ .code:n = \msg_redirect_module:nnn {widows-and-orphans}{warning}{ }
+ ,orphans .choice:
+ ,orphans / prevent .code:n = \int_set:Nn \clubpenalty { 10000 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+ ,orphans / avoid .code:n = \int_set:Nn \clubpenalty { 5000 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+ ,orphans / default .code:n = \int_set:Nn \clubpenalty { 150 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+ % ====================================
+ ,widows .choice:
+ ,widows / prevent .code:n = \int_set:Nn \widowpenalty { 10000 }
+ ,widows / avoid .code:n = \int_set:Nn \widowpenalty { 5000 }
+ ,widows / default .code:n = \int_set:Nn \widowpenalty { 150 }
+ % ====================================
+ ,hyphens .choice:
+ ,hyphens / prevent .code:n = \int_set:Nn \brokenpenalty { 10000 }
+ ,hyphens / avoid .code:n = \int_set:Nn \brokenpenalty { 2000 }
+ ,hyphens / default .code:n = \int_set:Nn \brokenpenalty { 50 }
+ % ====================================
+ ,prevent-all .code:n = \int_set:Nn \clubpenalty { 10000 }
+ \int_set:Nn \widowpenalty { 10000 }
+ \int_set:Nn \displaywidowpenalty{ 10000 }
+ \int_set:Nn \brokenpenalty { 10000 }
+ \int_set:Nn \predisplaypenalty { 10000 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+ ,avoid-all .code:n = \int_set:Nn \clubpenalty { 5000 }
+ \int_set:Nn \widowpenalty { 5000 }
+ \int_set:Nn \displaywidowpenalty { 2000 }
+ \int_set:Nn \brokenpenalty { 2000 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+ ,default-all .code:n = \int_set:Nn \clubpenalty { 150 }
+ \int_set:Nn \widowpenalty { 150 }
+ \int_set:Nn \displaywidowpenalty { 50 }
+ \int_set:Nn \brokenpenalty { 100 }
+ \int_set:Nn \predisplaypenalty { 10000 }
+ \int_set:Nn \@clubpenalty { \clubpenalty }
+}
+\ProcessKeysPackageOptions{fmwao}
+
+\NewDocumentCommand\WaOsetup{m}
+ { \keys_set:nn{fmwao}{#1} \__fmwao_initialize: \ignorespaces }
+
+\NewDocumentCommand\WaOparameters{}{\prop_show:N \l__fmwao_penalties_prop}
+\NewDocumentCommand\WaOignorenext{}
+ { \bool_gset_false:N\g__fmwao_gen_warn_bool }
+
+\endinput
+%%
+%% End of file `widows-and-orphans.sty'.