% \iffalse meta-comment % % Copyright (C) 2021 by Jinwen XU % ------------------------------- % % This file may be distributed and/or modified under the conditions of the LaTeX % Project Public License, either version 1.3c of this license or (at your option) % any later version. The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % % \fi % % \iffalse %<*driver> \ProvidesFile{mindflow.dtx} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{mindflow} %<*package> [2021/03/12 Mindflow environment] % % %<*driver> \documentclass{article} \usepackage{doc} \usepackage[a4paper,top=1.2in,bottom=1.2in,left=1.5in,right=1.2in]{geometry} \usepackage{titling} \setlength{\droptitle}{-.5in} \usepackage[linenumber,rightmarker]{mindflow} \usepackage{enumitem} \setlist{noitemsep} \usepackage{newpxtext} \usepackage{blindtext} \usepackage{parskip} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{mindflow.dtx} \end{document} % % \fi % % \CheckSum{125} % % \GetFileInfo{mindflow.dtx} % % % \title{The {\normalfont\textsf{mindflow}} package} % \author{\scshape Jinwen Xu} % \date{\filedate} % % \maketitle % % \section{Introduction} % % The \textsf{mindflow} package provides you a way to write your ideas, % annotations or writing plans. % For example (with option % \verb|linenumber| and \verb|rightmarker|): % \begin{mindflow} % What to write next: % \begin{itemize} % \item usage; % \item some internal macros; % \item an example maybe; % \item the complete code. % \end{itemize} % \end{mindflow} % You can also add line numbers to the other part of your document in the usual way. % Line numbers within the \textsf{mindflow} environments are independent from % those of the main text. % % \section{Usage} % % Simply load the package with \verb|\usepackage{mindflow}|. By default % it has no line numbers or markers. You can use the following options: % % \begin{tabular}{ll} % \verb|linenumber| & Enable line numbers\\ % \verb|leftmarker| & Enable left marker, by default it is a ``\verb|*|''\\ % \verb|rightmarker| & Enable right marker, by default it is a ``\verb|*|''\\ % \verb|incolumn| or \verb|twocolumn| & The separation line would fit in the column \\&(\emph{automatically applied in two-column documents})\\ % \verb|off| & Hide all the \verb|mindflow| environments % \end{tabular} % % \DescribeEnv{mindflow} % Then you can use the mindflow environment as % \begin{verbatim} % \begin{mindflow} % ... % \end{mindflow} % \end{verbatim} % % \section{Some technical details} % % \DescribeMacro{\mindflowTextFont} % \DescribeMacro{\mindflowNumFont} % The font for texts and line numbers within the \verb|mindflow| % environments can be specified by redefining \verb|\mindflowTextFont| and % \verb|\mindflowNumFont|. By default they are defined as: % \begin{verbatim} % \newcommand{\mindflowTextFont}{\normalfont\footnotesize} % \newcommand{\mindflowNumFont}{\normalfont\scriptsize\ttfamily} % \end{verbatim} % \DescribeMacro{\mindflowLeft} % \DescribeMacro{\mindflowRight} % The left and right marker can be changed by redefining % \verb|\mindflowLeft| and \verb|\mindflowRight|. Both have the default % value as ``\verb|*|''. % % \DescribeMacro{\mindflowLineHeight} % The height of the separation line is a length macro named \verb|\mindflowLineHeight|, % with default value \verb|0.4pt|. You can change this with \verb|\setlength|. % % And finally, the color for texts and line numbers within the \verb|mindflow| % environments are called \verb|mindflowText| and \verb|mindflowNum|, % respectively. By default, they have the same color as the context, with % opacity 30\% and 8\%, respectively. % \section{An example} % With option \verb|linenumber, leftmarker, rightmarker| and the following settings: % \begin{verbatim} % \colorlet{mindflowText}{blue!50!cyan!80} % \colorlet{mindflowNum}{blue!50!cyan!80} % \renewcommand{\mindflowTextFont}{\normalfont\footnotesize\sffamily\itshape} % \renewcommand{\mindflowNumFont}{\normalfont\footnotesize\sffamily} % \renewcommand{\mindflowLeft}{\hspace{1em}\(\succ\)} % \renewcommand{\mindflowRight}{\(\prec\)} % \setlength{\mindflowLineHeight}{1pt} % \end{verbatim} % One gets: % \makeatletter % \@mindflow@leftmarkertrue % \makeatother % \colorlet{mindflowText}{blue!50!cyan!80} % \colorlet{mindflowNum}{blue!50!cyan!80} % \renewcommand{\mindflowTextFont}{\normalfont\footnotesize\sffamily\itshape} % \renewcommand{\mindflowNumFont}{\normalfont\footnotesize\sffamily} % \renewcommand{\mindflowLeft}{\hspace{1em}\(\succ\)} % \renewcommand{\mindflowRight}{\(\prec\)} % \setlength{\mindflowLineHeight}{1pt} % \begin{mindflow} % \blindtext % \end{mindflow} % % \StopEventually{} % % \section{Implementation} % Below is the complete source code of this package. % % \begin{macrocode} \RequirePackage{kvoptions} \SetupKeyvalOptions{% family = @mindflow, prefix = @mindflow@ } \DeclareBoolOption[false]{off} % Turn off mindflow \DeclareBoolOption[false]{leftmarker} % Left marker \DeclareBoolOption[false]{rightmarker} % Right marker \DeclareBoolOption[false]{linenumber} % Line numbers \DeclareBoolOption[false]{twocolumn} % Two column \DeclareBoolOption[false]{incolumn} % Separation line fits in the column \ProcessKeyvalOptions*\relax \if@mindflow@twocolumn \@mindflow@incolumntrue \fi %%================================ %% Initialization %%================================ \RequirePackage{lineno} \RequirePackage{xcolor} \colorlet{mfSavedColor}{.} \colorlet{mindflowText}{mfSavedColor!30} \colorlet{mindflowNum}{mfSavedColor!8} \newcommand{\mindflowTextFont}{\normalfont\footnotesize} \newcommand{\mindflowNumFont}{\normalfont\scriptsize\ttfamily} \newcommand{\mindflowLeft}{*} \newcommand{\mindflowRight}{*} \newlength{\mindflowLineHeight} \setlength{\mindflowLineHeight}{0.4pt} %%================================ %% The mindflow environment %%================================ \newif\ifLNturnsON \newcommand*{\mfSepLine}{% \parskip=0pt \LNturnsONfalse% \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers% \par\noindent\nopagebreak% \if@mindflow@incolumn% \makebox[\linewidth]{\rule{\linewidth}{\mindflowLineHeight}}% \else% \hspace*{-\paperwidth}\makebox[\linewidth]{\rule{4\paperwidth}{\mindflowLineHeight}}% \fi% \nopagebreak\par% \ifLNturnsON\linenumbers\fi% } \newcounter{recordLN} \newcounter{mfLN} \setcounter{mfLN}{1} \if@mindflow@off \RequirePackage{verbatim} \let\mindflow=\comment \let\endmindflow=\endcomment \else \newenvironment{mindflow} {% \setcounter{recordLN}{\value{linenumber}}% \setcounter{linenumber}{\value{mfLN}}% \LNturnsONfalse% \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers% \mindflowTextFont\color{mindflowText}% \mfSepLine% \linenumbers% \renewcommand\makeLineNumber{% \hss\color{mindflowNum}% \if@mindflow@linenumber% \mindflowNumFont\LineNumber~% \fi% \if@mindflow@leftmarker% \mindflowLeft\hspace{1em}% \fi% \if@mindflow@rightmarker% \rlap{\hskip\textwidth\hspace{1em}\mindflowRight}% \fi% }% } {% \par% \vspace{-.5\baselineskip}\mfSepLine% \ifLNturnsON\linenumbers\fi% \setcounter{mfLN}{\value{linenumber}}% \setcounter{linenumber}{\value{recordLN}}% } \fi % \end{macrocode} % % \Finale \endinput