From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/noindentafter/README | 50 ++++ .../contrib/noindentafter/noindentafter-dry.sty | 54 ++++ .../noindentafter/noindentafter-packagedoc.cls | 313 +++++++++++++++++++++ .../latex/contrib/noindentafter/noindentafter.pdf | Bin 0 -> 223162 bytes .../latex/contrib/noindentafter/noindentafter.sty | 189 +++++++++++++ .../latex/contrib/noindentafter/noindentafter.tex | 205 ++++++++++++++ 6 files changed, 811 insertions(+) create mode 100644 macros/latex/contrib/noindentafter/README create mode 100644 macros/latex/contrib/noindentafter/noindentafter-dry.sty create mode 100644 macros/latex/contrib/noindentafter/noindentafter-packagedoc.cls create mode 100644 macros/latex/contrib/noindentafter/noindentafter.pdf create mode 100644 macros/latex/contrib/noindentafter/noindentafter.sty create mode 100644 macros/latex/contrib/noindentafter/noindentafter.tex (limited to 'macros/latex/contrib/noindentafter') diff --git a/macros/latex/contrib/noindentafter/README b/macros/latex/contrib/noindentafter/README new file mode 100644 index 0000000000..1eb4449dbf --- /dev/null +++ b/macros/latex/contrib/noindentafter/README @@ -0,0 +1,50 @@ +latex-noindentafter +=============== + +LaTeX Package : noindentafter 0.2.2 + +Last Modified : 2014/11/30 + +Author : Michiel Helvensteijn (www.mhelvens.net) + + +Summary +------- + +This pack­age, as the name sug­gests, sup­plies tools to au­to­mat­i­cally +sup­press in­den­ta­tion in para­graphs, specif­i­cally those fol­low­ing +par­tic­u­lar macros or en­vi­ron­ments. + + +Prerequisites +------------- + +To use this package, you need only `etoolbox`, though to generate +the documentation some other packages are needed. + + +Installation +------------- + +`noindentafter.sty` is provided directly in the package archive. +Put it in a place where your LaTeX distribution can find it. +(`noindentafter.sty` is not generated, but manually maintained; + you may use docstrip to remove the documentation, but you don't + have to; it will just work the way it is) + + +Documentation +------------- +`noindentafter.pdf` is provided directly in the package archive. +To generate the documentation yourself, run LaTeX on `noindentafter.tex`. +(`noindentafter.tex` does not contain the package code itself; it inputs + `noindentafter.sty` directly to document the implementation) + + +License +------- + +This material is subject to the LaTeX Project Public License. See +http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html +for the details of that license. + diff --git a/macros/latex/contrib/noindentafter/noindentafter-dry.sty b/macros/latex/contrib/noindentafter/noindentafter-dry.sty new file mode 100644 index 0000000000..27ba1a3077 --- /dev/null +++ b/macros/latex/contrib/noindentafter/noindentafter-dry.sty @@ -0,0 +1,54 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \iffalse %%%% +% % +% Copyright (c) 2014 - Michiel Helvensteijn - www.mhelvens.net % +% % +% https://github.com/mhelvens/latex-delta-modules % +% % +% This work may be distributed and/or modified under the conditions % +% of the LaTeX Project Public License, either version 1.3 of this % +% license or (at your option) any later version. The latest version % +% of this license is in http://www.latex-project.org/lppl.txt % +% and version 1.3 or later is part of all distributions of LaTeX % +% version 2005/12/01 or later. % +% % +% This work has the LPPL maintenance status 'maintained'. % +% % +% The Current Maintainer of this work is Michiel Helvensteijn. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%% + +% I will 'officially' release this file at some point in the future. For +% now I'm just using it to document a couple of packages. Still, it's +% released under LPPL, so use it as you will. +% +% -- Michiel Helvensteijn + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{noindentafter-dry} + [2013/10/11 convenience macros for reusing LaTeX code] + +\RequirePackage{filecontents} +\RequirePackage{xparse} +\RequirePackage{etoolbox} +\RequirePackage{withargs} + +\newcommand\minput[1]{% + \input{#1}\unskip% +} + +\NewDocumentCommand{\NewDRYer}{m +m}{% + \withargs [\uniquecsname] [#2] {% + \newenvironment{#1}{% + \begingroup% + \@tempswafalse\filec@ntents{##1.tmp}% + }{% + \endfilecontents% + \endgroup% + }% + \AfterEndEnvironment{#1}{% + \withargs (xn) [##1.tmp] [\minput{##1.tmp}] {% + ##2% + }% + }% + }% +} diff --git a/macros/latex/contrib/noindentafter/noindentafter-packagedoc.cls b/macros/latex/contrib/noindentafter/noindentafter-packagedoc.cls new file mode 100644 index 0000000000..1eb80d548c --- /dev/null +++ b/macros/latex/contrib/noindentafter/noindentafter-packagedoc.cls @@ -0,0 +1,313 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Copyright (C) 2012-2013 by Michiel Helvensteijn - www.mhelvens.net % +% % +% This work may be distributed and/or modified under the % +% conditions of the LaTeX Project Public License, either % +% version 1.3 of this license or (at your option) any later % +% version. The latest version of this license is in % +% http://www.latex-project.org/lppl.txt % +% and version 1.3 or later is part of all distributions of % +% LaTeX version 2005/12/01 or later. % +% % +% This work has the LPPL maintenance status `author-maintained'. % +% % +% The Current Maintainer of this work is Michiel Helvensteijn. % +% % +% This work consists of the file packagedoc.cls. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\let\packagename\jobname + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Document Class % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\LoadClassWithOptions{ltxdoc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Importing The Relevant Package % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\RequirePackage{\packagename} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Importing Other Packages % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\RequirePackage[hyphens]{url} + +\RequirePackage{etoolbox} +\RequirePackage[xcolor]{mdframed} +\RequirePackage{marginnote} +\RequirePackage{listings} +\RequirePackage{textcomp} +\RequirePackage[colorlinks=true]{hyperref} +\RequirePackage{noindentafter-dry} +\RequirePackage{needspace} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Documentation Options % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\EnableCrossrefs +\CodelineIndex +\RecordChanges + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% File Info % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\GetFileInfo{\packagename.sty} + +\title{The \textsf{\packagename} package\thanks{% + This document corresponds to \textsf{\packagename}~\fileversion, + dated \filedate.% +}} + +\author{ + Michiel Helvensteijn\\ + \href{mailto:mhelvens+latex@gmail.com}{mhelvens+latex@gmail.com} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Development Info % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newmdenv[ + leftline = false, + rightline = false +]{bannerframe} + +\apptocmd{\maketitle}{ + \begin{bannerframe} + \small + \begin{center} + Development of this package is organized at + \href{http://latex-\packagename.googlecode.com} + {latex-\packagename.googlecode.com}.\\ + I am happy to receive feedback there! + \end{center} + \end{bannerframe} +}{}{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Example Environment Setup % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%% Extra keywords for LaTeX +% +\newcommand{\moretexcs}[1]{ + \lstdefinelanguage{latex}{ + language=[LaTeX]tex, + alsoletter={\[,\],\$}, + moretexcs={ExplSyntaxOn,ExplSyntaxOff,lstinputlisting,detokenize,[,],#1}, + keywords={\$} + } +} + +%%% Code formatting +% +\lstdefinestyle{examplecode}{% + language=latex,% + basicstyle=\ttfamily\small,% + texcsstyle=*\bfseries,% + keywordstyle=*\bfseries,% + upquote=true% +} + +%%% Setting up example code block +% +\definecolor{examplecodelinecolor}{rgb}{0,0,0} +\definecolor{examplecodebackgroundcolor}{rgb}{.9,.9,.9} +\newmdenv[ + linecolor = examplecodelinecolor, + backgroundcolor = examplecodebackgroundcolor, + skipabove = 0pt, + skipbelow = 0pt, + innertopmargin = -1pt, + innerrightmargin = 1pt, + innerbottommargin = -1pt, + innerleftmargin = 1pt +]{examplecodeframe} + +%%% Defining example output block +% +\definecolor{exampleoutputbackgroundcolor}{rgb}{1,1,1} +\newmdenv[ + linecolor = examplecodelinecolor, + backgroundcolor = exampleoutputbackgroundcolor, + skipabove = 0pt, + skipbelow = 0pt, + innertopmargin = 6pt, + innerrightmargin = 6pt, + innerbottommargin = 6pt, + innerleftmargin = 6pt, + nobreak = true +]{exampleoutputframe} + +%%% Macros for counting lines in file, adapted from +%%% http://andreas.scherbaum.la/blog/archives/ +%%% 670-Read-number-lines-in-a-file-in-LaTeX.html +% +\RequirePackage{ifthen} +\newboolean{packagedoc@restfile} +\newcommand*{\packagedoc@fileline}{} +\newread\packagedoc@file +\newcommand*{\packagedoc@readnextline}[1]{% + \ifthenelse{\boolean{packagedoc@restfile}}{% + \read#1 to \packagedoc@fileline% + \ifeof#1\setboolean{packagedoc@restfile}{false}% + \else\fi% + }{}% +} +\newcommand*{\countlinesinfile}[2]{% + \setboolean{packagedoc@restfile}{true}% + \setcounter{packagedoc@linecount}{0}% + \openin\packagedoc@file=#1% + \whiledo{\boolean{packagedoc@restfile}}{% + \packagedoc@readnextline{\packagedoc@file}% + \ifthenelse{\boolean{packagedoc@restfile}}{% + \stepcounter{packagedoc@linecount}% + }{}% + }% + \closein\packagedoc@file% + \edef#2{\thepackagedoc@linecount}% +} + +\newcounter{packagedoc@linecount} +\newlength{\packagedoc@spacetoreserve} + +%%% DRYer without output +% +\NewDRYer{latex-example}{% + \vskip\abovedisplayskip% + {% + \ttfamily\small% + \countlinesinfile{#1}{\countedlines}% + \setlength{\packagedoc@spacetoreserve}{\countedlines\baselineskip}% + \addtolength{\packagedoc@spacetoreserve}{-1pt}% + \needspace{\packagedoc@spacetoreserve}% + }% + \begin{examplecodeframe}% + \renewcommand{\ttdefault}{pcr}% + \lstinputlisting[style=examplecode]{#1}% + \end{examplecodeframe}% + #2% + \vskip\belowdisplayskip% +} + +%%% DRYer WITH output but WITHOUT side-effects +% +\NewDRYer{latex-example-show}{% + \vskip\abovedisplayskip% + {% + \ttfamily\small% + \countlinesinfile{#1}{\countedlines}% + \setlength{\packagedoc@spacetoreserve}{\countedlines\baselineskip}% + \addtolength{\packagedoc@spacetoreserve}{\baselineskip}% + \needspace{\packagedoc@spacetoreserve}% + }% + \begin{examplecodeframe}% + \renewcommand{\ttdefault}{pcr}% + \lstinputlisting[style=examplecode]{#1}% + \end{examplecodeframe}\vspace{-1pt}% + \begin{exampleoutputframe}% + #2% + \end{exampleoutputframe}% + \vskip\belowdisplayskip% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Implementation Code Box Setup % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%% Saving old implementation code block font +% +\AtBeginDocument{\let\old@macro@font\macro@font} + +%%% Setup for 'interesting' implementation code blocks +% +\definecolor{interestingcodebackgroundcolor}{rgb}{.9,.9,.9} +\definecolor{interestingcodelinecolor}{rgb}{0,0,0} +\mdfdefinestyle{interestingcode}{ + linecolor = interestingcodelinecolor, + backgroundcolor = interestingcodebackgroundcolor +} +\newcommand*{\interesting}{% + \def\codestyle{interestingcode}% + \def\codeskipabove{2pt}% + \let\macro@font\old@macro@font% +} + +%%% Setup for 'UNinteresting' implementation code blocks +% +\definecolor{uninterestingcodebackgroundcolor}{rgb}{.97,.97,.97} +\definecolor{uninterestingcodelinecolor}{rgb}{.5,.5,.5} +\definecolor{uninterestingcodecolor}{rgb}{.4,.4,.4} +\mdfdefinestyle{uninterestingcode}{ + linecolor = uninterestingcodelinecolor, + backgroundcolor = uninterestingcodebackgroundcolor, +} +\newcommand*{\uninteresting}{% + \def\codestyle{uninterestingcode}% + \def\codeskipabove{-2pt}% + \def\macro@font{\color{uninterestingcodecolor}\old@macro@font}% +} + +%%% Actually surround 'macrocode' with the frame +% +\surroundwithmdframed[ + style = \codestyle, + skipabove = \abovedisplayskip, + skipbelow = \belowdisplayskip, + splittopskip = 4pt, + splitbottomskip = 1pt, + innertopmargin = -2pt, + innerrightmargin = 1pt, + innerbottommargin = 5pt, + innerleftmargin = 4pt +]{macrocode} + +%%% Start out with 'interesting' code status and +%%% always go back to it after one code block +% +\interesting +\AfterEndEnvironment{macrocode}{\interesting} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Argument Specifiers and such % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand*{\movarg}[1]{[ \texttt{#1} ]} +\newcommand*{\momarg}[1]{[ \meta{#1} ]} + +\newcommand{\describemacro}[2]{% + \needspace{3\baselineskip}% + \noindent\\\DescribeMacro{#1} #2\\% +} + +\newcommand{\describemetamacro}[2]{% + \needspace{3\baselineskip}% + \noindent\\\marginnote{\meta{#1}} #2\\% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Automatic Implementation Docs % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\AtEndDocument{ + \section{Implementation} + + \StopEventually {\PrintChanges} + + We now show and explain the entire implementation from \texttt{\packagename.sty}. + + \DocInput{\packagename.sty} + + \Finale + + \PrintIndex +} diff --git a/macros/latex/contrib/noindentafter/noindentafter.pdf b/macros/latex/contrib/noindentafter/noindentafter.pdf new file mode 100644 index 0000000000..b8d1d8aad1 Binary files /dev/null and b/macros/latex/contrib/noindentafter/noindentafter.pdf differ diff --git a/macros/latex/contrib/noindentafter/noindentafter.sty b/macros/latex/contrib/noindentafter/noindentafter.sty new file mode 100644 index 0000000000..2ea6e22b37 --- /dev/null +++ b/macros/latex/contrib/noindentafter/noindentafter.sty @@ -0,0 +1,189 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \iffalse %%%% +% % +% Copyright (c) 2014 - Michiel Helvensteijn - www.mhelvens.net % +% % +% http://latex-noindentafter.googlecode.com % +% % +% This work may be distributed and/or modified under the conditions % +% of the LaTeX Project Public License, either version 1.3 of this % +% license or (at your option) any later version. The latest version % +% of this license is in http://www.latex-project.org/lppl.txt % +% and version 1.3 or later is part of all distributions of LaTeX % +% version 2005/12/01 or later. % +% % +% This work has the LPPL maintenance status `maintained'. % +% % +% The Current Maintainer of this work is Michiel Helvensteijn. % +% % +% This work consists of the files noindentafter.tex and noindentafter.sty. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%% + +% \CheckSum{50} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Package Info} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{noindentafter}[2014/11/30 0.2.2 + prevent paragraph indentation after specific environments or macros] +% \end{macrocode} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Packages} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \begin{macrocode} +\RequirePackage{etoolbox} +% \end{macrocode} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Patches} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% \needspace{5\baselineskip}\begin{macro}{\end} +% +% The package |etoolbox| provides the command +% |\AfterEndEnvironment| which creates a hook executed at a +% very late point inside the |\end| command. However, this +% hook is still located before |\ignorespaces|, which is +% too early to properly suppress the indention after an +% environment. Therefore another hook is now added to |\end| +% using |\patchcmd|. This new hook puts new code at the very +% end. +% +% \begin{macrocode} +\patchcmd\end{% + \if@ignore\@ignorefalse\ignorespaces\fi% +}{% + \if@ignore\@ignorefalse\ignorespaces\fi% + \csuse{@noindent@#1@hook}% +}{}{% + \PackageWarningNoLine{noindentafter}{% + Patching `\string\end' failed!\MessageBreak% + `\string\NoIndentAfter...' commands won't work% + }% +} +% \end{macrocode} +% +%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Macros} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% \needspace{5\baselineskip}\begin{macro}{\@NoIndentAfter} +% +% \noindent This command implements the main principle +% behind this package. It checks whether it is followed by +% a paragraph. If so, the command |\par| is temporarily +% changed using |\everypar|, so that the following paragraph +% is not indented. Immediately afterwards, default paragraph +% behavior is restored with |\@restorepar| (from the \LaTeX{} +% base). +% +% \begin{macrocode} +\newcommand*\@NoIndentAfter{% + \@ifnextchar\par{% + \def\par{% + \everypar{\setbox\z@\lastbox\everypar{}}% + \@restorepar% + }% + }{}% +} +% \end{macrocode} +% +%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% \needspace{5\baselineskip}\begin{macro}{\NoIndentAfterThis} +% +% \noindent Enforce a paragraph break and suppress +% indentation for whatever follows. +% +% \begin{macrocode} +\newrobustcmd*{\NoIndentAfterThis}{\@NoIndentAfter\par\par} +% \end{macrocode} +% +%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % \needspace{5\baselineskip}\begin{macro}{\NoIndentAfterEnv} +%%% \marg{environment}\\ +% +% \noindent Append |\@NoIndentAfter| to the output of +% \meta{environment} by using the new environment hook. +% +% \begin{macrocode} +\newrobustcmd{\NoIndentAfterEnv}[1]{% + \csdef{@noindent@#1@hook}{\@NoIndentAfter}% +} +% \end{macrocode} +% +%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % \needspace{5\baselineskip}\begin{macro}{\NoIndentAfterCmd} +%%% \marg{command}\\ +% +% \noindent Append |\NoIndentAfterThis| to the output of +% \meta{command}. +% +% \begin{macrocode} +\newrobustcmd*{\NoIndentAfterCmd}[1]{% + \apptocmd{#1}{\NoIndentAfterThis}{}{% + \PackageWarning{noindentafter}{% + Patching `\string#1' failed!\MessageBreak% + `\string\NoIndentAfterCmd' won't work% + }% + }% +} +% \end{macrocode} +% +%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + diff --git a/macros/latex/contrib/noindentafter/noindentafter.tex b/macros/latex/contrib/noindentafter/noindentafter.tex new file mode 100644 index 0000000000..6aac2ebe06 --- /dev/null +++ b/macros/latex/contrib/noindentafter/noindentafter.tex @@ -0,0 +1,205 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Copyright (c) 2014 - Michiel Helvensteijn - www.mhelvens.net % +% % +% http://latex-noindentafter.googlecode.com % +% % +% This work may be distributed and/or modified under the % +% conditions of the LaTeX Project Public License, either % +% version 1.3 of this license or (at your option) any later % +% version. The latest version of this license is in % +% http://www.latex-project.org/lppl.txt % +% and version 1.3 or later is part of all distributions of % +% LaTeX version 2005/12/01 or later. % +% % +% This work has the LPPL maintenance status `maintained'. % +% % +% The Current Maintainer of this work is Michiel Helvensteijn. % +% % +% This work consists of the files noindentafter.tex and noindentafter.sty. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[a4paper]{noindentafter-packagedoc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Setup % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NoIndentAfterEnv{latex-example-show} +\NoIndentAfterCmd{\describemacro} + +\moretexcs{% + NoIndentAfterThis,NoIndentAfterEnv,NoIndentAfterCmd +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Global Changes % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\changes{0.0.1}{2013/08/02} + {initial version} +\changes{0.2.0}{2014/11/30} + {new implementation, fixing a spacing issue} +\changes{0.2.2}{2014/11/30} + {fixed version number in the README} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\maketitle + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Introduction} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Some people prefer certain LaTeX environments ---such as |itemize| or +|theorem|--- never to be followed by an indented paragraph. It is of course +possible to manually add the |\noindent| command to each occurrence, but +it's easy to forget to do this. Also, all those |\noindent| commands leave +your \TeX{} code just a little bit more chaotic and more burdensome to read. + +There are a number of solutions floating around, but many of them are not +particularly robust, or only work in specific cases. + +The |noindentafter| package provides a few simple commands which can be used +to patch existing macros and environments. They work as expected in all cases +I've encountered. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Usage} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\noindent\DescribeMacro{\NoIndentAfterThis} +% +This is the most primitive macro offered by the package. It forces a +paragraph break and suppresses indentation for whatever follows: + +\begin{latex-example-show} + Lorem ipsum dolor sit amet, consectetur adipiscing + elit. \NoIndentAfterThis Pellentesque hendrerit volutpat + feugiat. Ut purus leo, pulvinar sit amet vehicula non, + pulvinar eu lacus. Curabitur id mollis ligula. +\end{latex-example-show} + + + +\pagebreak % Hack to make the footnote appear on page 1. + + + +\describemacro{\NoIndentAfterEnv}{\marg{environment}} + +This is probably the command most people will want to use. +The \meta{environment} argument should contain an environment +name. After using this command, any paragraph following such +an environment will remain unindented. + +\begin{latex-example-show} + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + \begin{itemize} + \item First Item + \item Second Item + \end{itemize} + + Pellentesque hendrerit volutpat feugiat. Ut purus + leo, pulvinar sit amet vehicula non, pulvinar eu + lacus. Curabitur id mollis ligula. + + \NoIndentAfterEnv{itemize} + + Vestibulum id erat venenatis, facilisis enim non, + consectetur felis. Quisque iaculis eu arcu non pretium. + + \begin{itemize} + \item Third Item + \item Fourth Item + \end{itemize} + + Curabitur est elit, posuere pulvinar laoreet sed, varius + id mi. Nam lobortis elit nec mauris condimentum gravida. +\end{latex-example-show} + +You'll probably want to use these commands in the document +preamble but, as you can see, you don't really have to. + +\needspace{10\baselineskip} +Note that using the |\NoIndentAfterEnv| command on your own +environment is not the same as adding |\NoIndentAfterThis| +to the end of it: + +\begin{latex-example-show} + \newenvironment{test}{\itshape}{\NoIndentAfterThis} + + \begin{test} + Lorem ipsum dolor sit amet, consectetur + adipiscing elit. + \end{test} + + Pellentesque hendrerit volutpat feugiat. Ut purus + leo, pulvinar sit amet vehicula non, pulvinar eu + lacus. Curabitur id mollis ligula. +\end{latex-example-show} + +|\NoIndentAfterEnv| works because it bypasses the group +that surrounds every \LaTeX{} environment (and localizes +declarations). + + + +\describemacro{\NoIndentAfterCmd}{\marg{command}} + +Finally, you may also patch command sequences using the +|\NoIndentAfterCmd| command. There may not be many situations +where this is useful, but for me, there is at least one: + +\begin{latex-example-show} + Lorem ipsum dolor sit amet, consectetur adipiscing elit: + + \[ 1 + 1 = 2 \] + + Pellentesque hendrerit volutpat feugiat. Ut purus leo: + + \NoIndentAfterCmd \] + + \[ 2 + 2 = 4 \] + + Vestibulum id erat venenatis, facilisis enim non, + consectetur felis. +\end{latex-example-show} + +Note that braces around the \meta{command} argument are +optional, as always when an argument in \TeX{} consists +of only a single token. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Acknowledgements} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +I had been looking for a solution like this for quite a while. I came up +with a number of hacks that workedin some situations but not in others. +Eventually I asked a question on \url{http://tex.stackexchange.com}: +\begin{itemize} + \item \url{http://tex.stackexchange.com/questions/112404} +\end{itemize} + +I received two excellent answers -- one from cgnieder and one from lockstep. +This package was originally based on the technique proposed by cgnieder, as +it is simpler and more generally applicable. Still, the answer by lockstep +is definitely worth a read. + +Most recently, a better approach was implemented by tudscr to fix the spacing +above headers: +\begin{itemize} + \item \url{https://github.com/mhelvens/latex-noindentafter/pull/1} +\end{itemize} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\end{document} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- cgit v1.2.3