% \iffalse meta-comment % % linenoamsmath.dtx % Copyright 2021 Karl Wette % % 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 Karl Wette. % % This work consists of the files linenoamsmath.dtx and % linenoamsmath.ins and the derived file linenoamsmath.sty. % % \fi % % \iffalse %<*driver> \ProvidesFile{linenoamsmath.dtx} % %<*package> \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{linenoamsmath} [2021/09/29 v1.0 Make the amsmath package work with the lineno package] % % %<*driver> \documentclass{ltxdoc} \usepackage[leqno]{amsmath} \usepackage[mathlines]{linenoamsmath}[2021/09/29] \usepackage{lipsum} \usepackage{hyperref} \RecordChanges \begin{document} \DocInput{linenoamsmath.dtx} \end{document} % % \fi % % \CheckSum{74} % % \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 \~} % % \changes{v1.0}{2021/09/29}{Initial version} % % \GetFileInfo{linenoamsmath.sty} % % \title{The \textsf{linenoamsmath} package\thanks{This document % corresponds to \textsf{linenoamsmath}~\fileversion, dated \filedate.}} % \author{Karl Wette} % % \maketitle % % This package patches the % \textsf{amsmath}\footnote{\url{https://ctan.org/pkg/amsmath}} package to work % with the \textsf{lineno}\footnote{\url{https://ctan.org/pkg/lineno}} % package. The code I've used is largely based on the posts at % \url{https://tex.stackexchange.com/a/461192} and % \url{https://tex.stackexchange.com/a/443201}; credit is due to their author. % In addition I've made a few refinements to handle some corner cases. % % \section{Usage} % % Just include the package; it will automatically include \textsf{amsmath} and \textsf{lineno}: % \begin{verse} % |\usepackage{linenoamsmath}| \\ % ... \\ % |\linenumbers| \\ % ... Text with line numbers ... \\ % |\begin{align}| \\ % ... Equations without line numbers ... \\ % |\end{align}| % \end{verse} % All options to this package are passed through to \textsf{lineno}, % so e.g.\ if you want to add line numbers to equations you can specity the % |[mathlines]| option: % \begin{verse} % |\usepackage[mathlines]{linenoamsmath}| \\ % ... \\ % |\linenumbers| \\ % ... Text with line numbers ... \\ % |\begin{align}| \\ % ... Equations with line numbers ... \\ % |\end{align}| % \end{verse} % If you need to pass options to \textsf{amsmath}, you can include it manually first: % \begin{verse} % |\usepackage[...]{amsmath}| \\ % |\usepackage[mathlines]{linenoamsmath}| % \end{verse} % % \section{Demonstration} % % This section demonstrates that, with this package, line numbers are correctly % formatted when using \textsf{amsmath} math environments. % % \newcounter{lipsumparagraph} % \newcommand{\nextlipsum}{\stepcounter{lipsumparagraph}\lipsum[\thelipsumparagraph][1-4]} % \newcommand{\crs}{\qquad\qquad\texttt{[\textbackslash\textbackslash{}*]}\\*} % % \linenumbers % % \subsection{Normal text} % % \nextlipsum % % \subsection{\texttt{equation}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{equation} % E = m c^2 \,. % \end{equation} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{equation} % E = m c^2 \,. % \end{equation} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{equation*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{equation*} % E = m c^2 \,. % \end{equation*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{equation*} % E = m c^2 \,. % \end{equation*} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{\textbackslash[\ldots\textbackslash]}} % % \subsection{With line numbers in equations} % \nextlipsum % \[ % E = m c^2 \,. % \] % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \[ % E = m c^2 \,. % \] % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{multline}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{multline} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} + \mathcal{O}(x^{10}) \,. % \end{multline} % \nextlipsum % \begin{multline} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} \\ % + x^{10} - x^{11} + x^{12} - x^{13} + x^{14} - x^{15} + x^{16} - x^{17} + x^{18} - x^{19} + \mathcal{O}(x^{20}) \,. % \end{multline} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{multline} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} + \mathcal{O}(x^{10}) \,. % \end{multline} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{multline} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} \\ % + x^{10} - x^{11} + x^{12} - x^{13} + x^{14} - x^{15} + x^{16} - x^{17} + x^{18} - x^{19} + \mathcal{O}(x^{20}) \,. % \end{multline} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{multline*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{multline*} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} + \mathcal{O}(x^{10}) \,. % \end{multline*} % \nextlipsum % \begin{multline*} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} \crs % + x^{10} - x^{11} + x^{12} - x^{13} + x^{14} - x^{15} + x^{16} - x^{17} + x^{18} - x^{19} + \mathcal{O}(x^{20}) \,. % \end{multline*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{multline*} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} + \mathcal{O}(x^{10}) \,. % \end{multline*} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{multline*} % \frac{1}{1 + x} = 1 - x + x^{2} - x^{3} + x^{4} - x^{5} + x^{6} - x^{7} + x^{8} - x^{9} \\ % + x^{10} - x^{11} + x^{12} - x^{13} + x^{14} - x^{15} + x^{16} - x^{17} + x^{18} - x^{19} + \mathcal{O}(x^{20}) \,. % \end{multline*} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{gather}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{gather} % E = m c^2 \,. % \end{gather} % \nextlipsum % \begin{gather} % E = m c^2 \,, \\ % E^2 = p^2 c^2 + m_0^2 c^4 \,. % \end{gather} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{gather} % E = m c^2 \,. % \end{gather} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{gather} % E = m c^2 \,, \\ % E^2 = p^2 c^2 + m_0^2 c^4 \,. % \end{gather} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{gather*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{gather*} % E = m c^2 \,. % \end{gather*} % \nextlipsum % \begin{gather*} % E = m c^2 \,, \crs % E^2 = p^2 c^2 + m_0^2 c^4 \,. % \end{gather*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{gather*} % E = m c^2 \,. % \end{gather*} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{gather*} % E = m c^2 \,, \\ % E^2 = p^2 c^2 + m_0^2 c^4 \,. % \end{gather*} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{align}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{align} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{align} % \nextlipsum % \begin{align} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{align} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{align} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{align} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{align} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{align} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{align*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{align*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{align*} % \nextlipsum % \begin{align*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \crs % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{align*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{align*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{align*} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{align*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{align*} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{alignat}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{alignat}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{alignat} % \nextlipsum % \begin{alignat}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{alignat} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{alignat}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{alignat} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{alignat}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{alignat} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{alignat*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{alignat*}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{alignat*} % \nextlipsum % \begin{alignat*}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \crs % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{alignat*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{alignat*}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{alignat*} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{alignat*}{2} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{alignat*} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{flalign}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{flalign} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{flalign} % \nextlipsum % \begin{flalign} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{flalign} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{flalign} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{flalign} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{flalign} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{flalign} % \end{linenomath*} % \nextlipsum % % \subsection{\texttt{flalign*}} % % \subsection{With line numbers in equations} % \nextlipsum % \begin{flalign*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{flalign*} % \nextlipsum % \begin{flalign*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \crs % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{flalign*} % \nextlipsum % % \subsection{Without line numbers in equations} % \nextlipsum % \begin{linenomath*} % \begin{flalign*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,. % \end{flalign*} % \end{linenomath*} % \nextlipsum % \begin{linenomath*} % \begin{flalign*} % \nabla \cdot \vec E = 0 \,, &\quad \nabla \times \vec E = - \frac{\partial \vec B}{\partial t} \,, \\ % \nabla \cdot \vec B = 0 \,, &\quad \nabla \times \vec B = \frac{1}{c^2} \frac{\partial \vec E}{\partial t} \,. % \end{flalign*} % \end{linenomath*} % \nextlipsum % % \nolinenumbers % % \StopEventually{} % % \section{Implementation} % % All options to this package are passed through to \textsf{lineno}. % \begin{macrocode} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{lineno}} \ProcessOptions\relax % \end{macrocode} % Include \textsf{amsmath} and \textsf{lineno}. % \begin{macrocode} \RequirePackage{amsmath} \RequirePackage{lineno} % \end{macrocode} % Needs \textsf{etoolbox} for patching macros. % \begin{macrocode} \RequirePackage{etoolbox} % \end{macrocode} % Patch math environments: % \begin{itemize} % % \item Setting |\postdisplaypenalty=0| removes extra line numbers from % \textsf{amsmath} math environments. % % \item Patching |\math@cr@| to add |\linenoamsmath@ams@eqpen| to |\@eqpen|, % then setting |\linenoamsmath@ams@eqpen| to |\interdisplaylinepenalty|, % preserves line numbers when equations are separated using the |\\*| line % break instead of |\\|. % % \end{itemize} % \begin{macrocode} \newcommand*\linenoamsmath@patch[1]{% \cspreto{#1}{\linenomath}% \cspreto{#1*}{\linenomath}% \csappto{end#1}{\endlinenomath}% \csappto{end#1*}{\endlinenomath}% } \newcount\linenoamsmath@ams@eqpen \cspreto{math@cr@}{\global\@eqpen\numexpr\@eqpen+\linenoamsmath@ams@eqpen\relax} \newcommand*\linenoamsmath@patch@ams[1]{% \cspreto{#1}{% \linenomath% \postdisplaypenalty=0% \global\linenoamsmath@ams@eqpen\interdisplaylinepenalty% }% \cspreto{#1*}{% \linenomath% \postdisplaypenalty=0% \global\linenoamsmath@ams@eqpen\interdisplaylinepenalty% }% \csappto{end#1}{% \global\linenoamsmath@ams@eqpen\z@% \endlinenomath% }% \csappto{end#1*}{% \global\linenoamsmath@ams@eqpen\z@% \endlinenomath% }% } \linenoamsmath@patch{equation} \linenoamsmath@patch@ams{multline} \linenoamsmath@patch@ams{gather} \linenoamsmath@patch@ams{align} \linenoamsmath@patch@ams{alignat} \linenoamsmath@patch@ams{flalign} % \end{macrocode} % Patch |\mmeasure@| which is used internally by |multline|: % \begin{itemize} % % \item Setting |\interdisplaylinepenalty=0| removes an extra line number from % the beginning of a multi-line |multline| where line numbers in equations are % turned on. % % \item Adding |\\| to the end of the argument of |\mmeasure@| removes an extra % line number from the beginning of a single-line |multline| where line % numbers in equations are turned off. % % \item Need to set |\linenoamsmath@ams@eqpen| to zero while in this macro to % avoid creating extra line numbers. % % \end{itemize} % \begin{macrocode} \let\linenoamsmath@ams@mmeasure\mmeasure@ \def\mmeasure@#1{% \global\linenoamsmath@ams@eqpen\z@% \begingroup% \interdisplaylinepenalty=0% \linenoamsmath@ams@mmeasure{#1\\}% \endgroup% \global\linenoamsmath@ams@eqpen\interdisplaylinepenalty% } % \end{macrocode} % % \PrintChanges % \Finale \endinput % \endinput % Local Variables: % mode: doctex % TeX-master: t % End: