Initial commit

This commit is contained in:
Ian Jauslin 2020-02-12 22:58:32 -05:00
commit 9c9f888bb4
6 changed files with 1301 additions and 0 deletions

View File

@ -0,0 +1,294 @@
\documentclass[no_section_in_all]{ian}
\begin{document}
\hbox{}
\hfil{\bf\LARGE
On the convolution inequality $f\geqslant f\star f$\par
}
\vfill
\hfil{\bf\large Eric Carlen}\par
\hfil{\it Department of Mathematics, Rutgers University}\par
\hfil{\color{blue}\tt\href{mailto:carlen@rutgers.edu}{carlen@rutgers.edu}}\par
\vskip20pt
\hfil{\bf\large Ian Jauslin}\par
\hfil{\it Department of Physics, Princeton University}\par
\hfil{\color{blue}\tt\href{mailto:ijauslin@princeton.edu}{ijauslin@princeton.edu}}\par
\vskip20pt
\hfil{\bf\large Elliott H. Lieb}\par
\hfil{\it Departments of Mathematics and Physics, Princeton University}\par
\hfil{\color{blue}\tt\href{mailto:lieb@princeton.edu}{lieb@princeton.edu}}\par
\vskip20pt
\hfil{\bf\large Michael Loss}\par
\hfil{\it School of Mathematics, Georgia Institute of Technology}\par
\hfil{\color{blue}\tt\href{mailto:loss@math.gatech.edu}{loss@math.gatech.edu}}\par
\vfill
\hfil {\bf Abstract}\par
\medskip
We consider the inequality $f \geqslant f\star f$ for real functions in $L^1(\mathbb R^d)$ where $f\star f$ denotes the convolution of $f$ with itself. We show that all such functions $f$ are non-negative,
which is not the case for the same inequality in $L^p$ for any $1 < p \leqslant 2$, for which the convolution is defined. We also show that all solutions in $L^1(\mathbb R^d)$ satisfy $\int_{\mathbb R^d}f(x){\rm d}x \leqslant \textstyle\frac12$. Moreover, if
$\int_{\mathbb R^d}f(x){\rm d}x = \textstyle\frac12$, then $f$ must decay fairly slowly: $\int_{\mathbb R^d}|x| f(x){\rm d}x = \infty$, and this is sharp since for all
$r< 1$, there are solutions with $\int_{\mathbb R^d}f(x){\rm d}x = \textstyle\frac12$ and $\int_{\mathbb R^d}|x|^r f(x){\rm d}x <\infty$. However, if
$\int_{\mathbb R^d}f(x){\rm d}x = : a < \textstyle\frac12$, the decay at infinity can be much more rapid: we show that for all $a<\textstyle\frac12$, there are solutions such that for some $\epsilon>0$,
$\int_{\mathbb R^d}e^{\epsilon|x|}f(x){\rm d}x < \infty$.
\vfill
\hfil{\footnotesize\copyright\, 2020 by the authors. This paper may be reproduced, in its entirety, for non-commercial purposes.}
\eject
\setcounter{page}1
\pagestyle{plain}
\indent Our subject is the set of real, integrable solutions of the inequality
\begin{equation}
f(x)\geqslant f\star f(x)
,\quad\forall x\in\mathbb R^d\ ,
\label{ineq}
\end{equation}
where $f\star f(x)$ denotes the convolution $f\star f(x) = \int_{\mathbb R^d} f(x-y) f(y){\rm d}y$, which by Young's inequality \cite[Theorem 4.2]{LL96} is well defined as an element of
$L^{p/(2-p)}(\mathbb R^d)$ for all $1 \leqslant p\leqslant 2$. Thus, one may consider this inequality in $L^p(\mathbb R^d)$ for all $1 \leqslant p \leqslant 2$, but the case $p=1$ is special:
the solution set of (\ref{ineq}) is restricted in a number of surprising ways. Integrating both sides of (\ref{ineq}), one sees immediately that $\int_{\mathbb R^d} f(x){\rm d}x \leqslant 1$.
We prove that, in fact, all integrable solutions satisfy $\int_{\mathbb R^d} f(x){\rm d}x \leqslant \textstyle\frac12$, and this upper bound is sharp.
Perhaps even more surprising, we prove that all integrable solutions of (\ref{ineq}) are non-negative. This is {\em not true} for solutions in $L^p(\mathbb R^d)$, $ 1 < p \leqslant 2$.
For $f\in L^p(\mathbb R^d)$, $1\leqslant p \leqslant 2$, the Fourier transform $\widehat{f}(k) = \int_{\mathbb R^d}e^{-i2\pi k\cdot x} f(x){\rm d}x$ is well defined as an element of $L^{p/(p-1)}(\mathbb R^d)$. If $f$ solves the equation $f = f\star f$,
then $\widehat{f} = \widehat{f}^2$, and hence $\widehat{f}$ is the indicator function of a measurable set. By the Riemann-Lebesgue Theorem, if $f\in L^1(\mathbb R^d)$, then
$\widehat{f}$ is continuous and vanishes at infinity, and the only such indicator function is the indicator function of the empty set. Hence the only integrable solution of
$f = f*f$ is the trivial solution $f= 0$. However, for $1 < p \leqslant 2$, solutions abound: take $d=1$ and define $g$ to be the indicator function of the interval $[-a,a]$. Define
\begin{equation}\label{exam}
f(x) = \int_{\mathbb R} e^{-i2\pi k x} g(k){\rm d}k = \frac{ \sin 2\pi xa}{\pi x}\ ,
\end{equation}
which is not integrable, but which belongs to $L^p(\mathbb R)$ for all $p> 1$. By the Fourier Inversion Theorem $\widehat{f} = g$. Taking products, one gets examples in any dimension.
To construct a family of solutions to (\ref{ineq}), fix $a,t> 0$, and define $g_{a,t}(k) = a e^{-2\pi |k| t}$. By \cite[Theorem 1.14]{SW71},
$$
f_{a,t}(x) = \int_{\mathbb R^d} e^{-i2\pi k x} g_{a,t}(k){\rm d}k = a\Gamma((d+1)/2) \pi^{-(d+1)/2} \frac{t}{(t^2 + x^2)^{(d+1)/2}}\ .
$$
Since $g_{a,t}^2(k) = g_{a^2,2t}$, $f_{a,t}\star f_{a,t} = f_{a^2,2t}$, Thus, $f_{a,t} \geqslant f_{a,t}\star f_{a,t}$ reduces to
$$
\frac{t}{(t^2 + x^2)^{(d+1)/2}} \geqslant \frac{2at}{(4t^2 + x^2)^{(d+1)/2}}
$$
which is satisfied for all $a \leqslant 1/2$. Since $\int_{\mathbb R^d}f_{a,t}(x){\rm d}x =a$, this provides a class of solutions of (\ref{ineq}) that are non-negative and satisfy
\begin{equation}\label{half}
\int_{\mathbb R^d}f(x){\rm d}x \leqslant \frac12\ ,
\end{equation}
all of which have fairly slow decay at infinity, so that in every case,
\begin{equation}\label{tail}
\int_{\mathbb R^d}|x|f(x){\rm d}x =\infty \ .
\end{equation}
Our results show that this class of examples of integrable solutions of (\ref{ineq}) is surprisingly typical of {\em all} integrable solutions: every real integrable solution
$f$ of (\ref{ineq}) is positive, satisfies (\ref{half}),
and if there is equality in (\ref{half}), $f$ also satisfies (\ref{tail}). The positivity of all real solutions of (\ref{ineq}) in $L^1(\mathbb R^d)$ may be considered surprising since it is
false in $L^p(\mathbb R^d)$ for all $p > 1$, as the example (\ref{exam}) shows. We also show that when strict inequality holds in (\ref{half}) for a solution $f$ of (\ref{ineq}), it is possible for
$f$ to have rather fast decay; we construct examples such that $\int_{\mathbb R^d}e^{\epsilon|x|}f(x){\rm d}x < \infty$ for some $\epsilon> 0$. The conjecture that integrable solutions of (\ref{ineq})
are necessarily positive was motivated by recent work \cite{CJL19} on a partial differential equation involving a quadratic nonlinearity of $f\star f$ type, and the result proved here is the key to
the proof of positivity for solutions of this partial differential equations; see \cite{CJL19}.
\theo{Theorem}\label{theo:positivity}
If $f$ is a real valued function in $L^1(\mathbb R^d)$ such that
\begin{equation}\label{uineq}
f(x) - f\star f(x) =: u(x) \geqslant 0
\end{equation}
for all $x$. Then $\int_{\mathbb R^d} f(x)\ dx\leqslant\frac12$,
and $f$ is given by the convergent series
\begin{equation}
f(x) = \frac{1}{2} \sum_{n=1}^\infty c_n 4^n (\star^n u)(x)
\label{fun}
\end{equation}
where the $c_n\geqslant0$ are the Taylor coefficients in the expansion of $\sqrt{1-x}$
\begin{equation}\label{3half}
\sqrt{1-x}=1-\sum_{n=1}^\infty c_n x^n
,\quad
c_n=\frac{(2n-3)!!}{2^nn!} \sim n^{-3/2}
\end{equation}
In particular, $f$ is positive. Moreover, if $u\geqslant 0$ is any integrable function with $\int_{\mathbb R^d}u(x){\rm d}x \leqslant \textstyle\frac14$, then the sum on the right in (\ref{fun}) defines an integrable function $f$ that satisfies (\ref{uineq}).
\endtheo
\bigskip
\indent\underline{Proof}: Note that $u$ is integrable. Let $a := \int_{\mathbb R^d}f(x){\rm d}x$ and $b := \int_{\mathbb R^d}u(x){\rm d}x \geqslant 0$. Fourier transforming,
(\ref{uineq}) becomes
\begin{equation} \label{ft}
\widehat f(k) = \widehat f(k)^2 +\widehat u(k)\ .
\end{equation}
At $k=0$, $a^2 - a = -b$, so that $\left(a - \textstyle\frac12\right)^2 = \textstyle\frac14 - b$. Thus $0 \leqslant b \leqslant\textstyle\frac14$. Furthermore, since $u \geqslant 0$,
\begin{equation}
|\widehat u(k)|\leqslant\widehat u(0) \leqslant \textstyle\frac14
\end{equation}
and the first inequality is strict for $k\neq 0$. Hence for $k\neq 0$, $\sqrt{1-4\widehat u(k)} \neq 0$. By the Riemann-Lebesgue Theorem, $\widehat{f}(k)$ and $\widehat{u}(k)$ are both
continuous and vanish at infinity, and hence we must have that
\begin{equation}
\widehat f(k)=\textstyle\frac12-\textstyle\frac12\sqrt{1-4\widehat u(k)}
\label{hatf}
\end{equation}
for all sufficiently large $k$, and in any case $\widehat f(k)= \frac12\pm\frac12\sqrt{1-4\widehat u(k)}$. But by continuity and the fact that $\sqrt{1-4\widehat u(k)} \neq 0$ for any $k\neq 0$, the sign cannot switch.
Hence (\ref{hatf}) is valid for all $k$, including $k=0$, again by continuity. At $k=0$, $a = \textstyle\frac12 - \sqrt{1-4b}$, which proves (\ref{half}).
The fact that $c_n$ as specified in (\ref{3half}) satisfies $c_n \sim n^{-3/2}$ is a simple application of Stirling's formula, and it shows that the power series for $\sqrt{1-z}$ converges absolutely and
uniformly everywhere on the closed unit disc. Since $|4 \widehat u(k)| \leqslant 1$,
${\displaystyle
\sqrt{1-4 \widehat u(k)} = 1 -\sum_{n=1}^\infty c_n (4 \widehat u(k))^n}$. Inverting the Fourier transform, yields (\ref{fun}),and since $\int_{\mathbb R^d} 4^n\star^n u(x){\rm d}x \leqslant 1$,
the convergence of the sum in $L^1(\mathbb R^d)$ follows from the convergence of $\sum_{n=1}^\infty c_n$. The final statement follows from the fact that if $f$ is defined in terms of $u$ in this manner, (\ref{hatf}) is
valid, and then (\ref{ft}) and (\ref{uineq}) are satisfied.
\qed
\bigskip
\theo{Theorem}\label{theo:decay}
Let $f\in L^1(\mathbb R^d)$ satisfy (\ref{ineq}) and $\int_{\mathbb R^d} f(x)\ dx=\textstyle\frac12$. Then
$\int_{\mathbb R^d}|x| f(x)\ dx=\infty$.
\endtheo
\bigskip
\indent\underline{Proof}: If $\int_{\mathbb R^d} f(x)\ dx=\textstyle\frac12$, $\int_{\mathbb R^d} 4u(x)\ dx=1$, then $w(x) = 4u(x)$ is a probability density, and we can write $f(x) = \sum_{n=0}^\infty \star^n w$. Suppose that $|x|f(x)$ is integrable. Then $|x|w(x)$ is integrable. Let $m:= \int_{\mathbb R^d}xw(x){\rm d} x$. Since first moments add under convolution, the trivial inequality $|m||x| \geqslant m\cdot x$ yields
$$|m|\int_{\mathbb R^d} |x| \star^nw(x){\rm d}x \geqslant \int_{\mathbb R^d} m\cdot x \star^nw(x){\rm d}x = n|m|^2\ .$$
It follows that $\int_{\mathbb R^d} |x| f(x){\rm d}x \geqslant |m|\sum_{n=1}^\infty nc_n = \infty$. Hence $m=0$.
Suppose temporarily that in addition, $|x|^2w(x)$ is integrable. Let $\sigma^2$ be the variance of $w$; i.e., $\sigma^2 = \int_{\mathbb R^d}|x|^2w(x){\rm d}x\ .$
Define the function $\varphi(x) = \min\{1,|x|\}$. Then
$$
\int_{\mathbb R^d}|x| \star^n w(x){\rm d}x = \int_{\mathbb R^d}|n^{1/2}x| \star^n w(n^{1/2}x)n^{d/2}{\rm d}x \geqslant n^{1/2} \int_{\mathbb R^d}\varphi(x)\star^n w(n^{1/2}x)n^{d/2}{\rm d}x.
$$
By the Central Limit Theorem, since $\varphi$ is bounded and continuous,
\begin{equation}\label{CLT}
\lim_{n\to\infty} \int_{\mathbb R^d}\varphi(x)\star^n w(n^{1/2}x)n^{d/2}{\rm d}x = \int_{\mathbb R^d}\varphi(x) \gamma(x){\rm d}x =: C > 0
\end{equation}
where $\gamma(x)$ is a centered Gaussian probability density with variance $\sigma^2$.
This shows that there is a $\delta> 0$ for all sufficiently large $n$, $\int_{\mathbb R^d}|x| \star^n w(x){\rm d}x \geqslant \sqrt{n}\delta$, and then since $c_n\sim n^{3/2}$, $\sum_{n=1}^\infty c_n \int_{\mathbb R^d}|x| \star^n w(x){\rm d}x= \infty$.
To remove the hypothesis that $w$ has finite variance, note that if $w$ is a probability density with zero mean and infinite variance, $\star^n w(n^{1/2}x)n^{d/2}$ is ``trying'' to converge to a Gaussian of infinite variance. In particular, one would expect that for all $R>0$,
\begin{equation}\label{CLT2}
\lim_{n\to\infty} \int_{|x| \leqslant R}\star^n w(n^{1/2}x)n^{d/2}{\rm d}x = 0\ ,
\end{equation} so that the limit in (\ref{CLT}) has the value $1$. The proof then proceeds as above. The fact that (\ref{CLT2}) is valid is proved in \cite[Corollary 1]{CGR08}.
\qed
\bigskip
\delimtitle{\bf Remark}
For the convenience of the reader, we sketch, at the end of this paper, the part of of the argument in \cite{CGR08} that proves (\ref{CLT2}), since we know of no reference for this simple statement, and the proof in \cite{CGR08} deals with a more complicated variant of this problem.
\endtheo
\bigskip
\theo{Theorem}
If $f$ satisfies\-~(\ref{ineq}), and
$\int |x|^2[f(x)-f\star f(x)]\ dx<\infty$, then, for all $0\leqslant p<1$,
\begin{equation}
\int |x|^pf(x)\ dx<\infty.
\end{equation}
\endtheo
\bigskip
\indent\underline{Proof}: We may suppose that $f$ is not identically $0$. Let $u = f - f\star f$ as above. Let $t := 4\int_{\mathbb R^d}u(x){\rm d}x \leqslant 1$. Then $t> 0$. Define $w := t^{-1}4u$; $w$ is a probability density and
$$
f(x) = \sum_{n=1}^\infty c_n t^n \star^n w(x)\ .
$$
By hypothesis, $w$ has a mean $m := \int_{\mathbb R^d} x w(x){\rm d}x$ and variance $\sigma^2 = \int_{\mathbb R^d} |x-m|^2 w(x){\rm d}x < \infty$. Since variance is additive under convolution,
$$
\int_{\mathbb R^d} |x-m|^2 \star^n w(x){\rm d}x = n\sigma^2\ .
$$
By H\"older's inequality, for all $0 < p < 2$,
$\int_{\mathbb R^d} |x-m|^p \star^n w(x){\rm d}x \leqslant (n\sigma^2)^{p/2}$.
It follows that for $0 < p < 1$,
$$
\int_{\mathbb R^d} |x-m|^p f(x){\rm d}x \leqslant (\sigma^2)^{p/2} \sum_{n=1}^\infty n^{p/2} c_n < \infty\ ,
$$
again using the fact that $c_n\sim n^{-3/2}$.
\qed
Theorem \ref{theo:decay} implies that when $\int f=\frac12$, $f$ cannot decay faster than $|x|^{-(d+1)}$. However, integrable solutions $f$ of (\ref{ineq}) such that $\int_{\mathbb R^d}f(x){\rm d}x < \textstyle\frac12$
can decay quite rapidly, even having finite exponential moments, as we now show.
Consider a non-negative, integrable function $u$, which integrates to $r<\frac14$, and satisfies
\begin{equation}
\int_{\mathbb R^d} u(x)e^{\lambda|x|}{\rm d}x < \infty
\end{equation}
for some $\lambda>0$.
The Laplace transform of $u$ is
$ \widetilde u(p):=\int e^{-px}u(x)\ {\rm d} x$ which is analytic for $|p|<\lambda$, and $\widetilde u(0) < \textstyle\frac14$.
Therefore, there exists $0<\lambda_0\leqslant \lambda$ such that, for all $|p|\leqslant\lambda_0$,
$\widetilde u(p)<\textstyle\frac14$.
By Theorem \ref{theo:positivity},
${\displaystyle
f(x):=\frac12\sum_{n=1}^\infty 4^nc_n(\star^n u)(x)}$
is an integrable solution of (\ref{ineq}). For
$|p|\leqslant\lambda_0$, it has a well-defined Laplace transform $ \widetilde f(p)$ given by
\begin{equation}
\widetilde f(p)=\int e^{-px}f(x)\ dx=\frac12(1-\sqrt{1-4\widetilde u(p)})
\end{equation}
which is analytic for $|p|\leqslant \lambda_0$.
Note that
${\displaystyle e^{s|x|} \leqslant \prod_{j=1}^d e^{|sx_j|} \leqslant \frac{1}{d}\sum_{j=1}^d e^{d|sx_j|} \leqslant \frac{2}{d}\sum_{j=1}^d \cosh(dsx_j)}$.
What has just been shown, yields a $\delta>0$ so that for $|s|< \delta$, $\int_{\mathbb R^d} \cosh(dsx_j)f(x){\rm d}x < \infty$ for each $j$. It follows that for
$0 < s < \delta$, $\int_{\mathbb R^d} e^{s|x|}f(x){\rm d}x < \infty$.
\bigskip
\delimtitle{\bf Remark}
One might also consider the inequality $f \leqslant f \star f$ in $L^1(\mathbb R^d)$, but it is simple to construct solutions that have both signs. Consider any radial Gaussian probability density $g$,
Then $g\star g(x) \geqslant g(x)$ for all sufficiently large $|x|$, and taking $f:= ag$ for $a$ sufficiently large, we obtain $f< f\star f$ everywhere. Now on a small neighborhood of the origin, replace the value of
$f$ by $-1$. If the region is taken small enough, the new function $f$ will still satisfy $f < f\star f$ everywhere.
\endtheo
\bigskip
We close by sketching a proof of (\ref{CLT2}) using the construction in \cite{CGR08}. Let $w$ be a mean zero, infinite variance probability density on $\mathbb R^d$.
Pick $\epsilon>0$, and choose a large value $\sigma$ such that $(2\pi \sigma^2)^{-d/2}R^d|B| < \epsilon/2$, where $|B|$ denotes the volume of the ball. The point of this is that if
$G$ is a centered Gaussian random variable with variance $\sigma^2$, the probability is no more than $\epsilon/2$ that $G$ lies in {\em any} particular translate $B_R+y$ of the ball of radius $R$.
Let $A \subset \mathbb R^d$ be a bounded set so that $\int_{A}xw(x){\rm d}x = 0$ and $\int_{A}|x|^2w(x){\rm d}x = \sigma^2$. It is then easy to find mutually independent random variables $X$, $Y$ and $\alpha$ such that
$X$ takes values in $A$ and, has zero mean and variance greater than $\sigma^2$, $\alpha$ is a Bernoulli variable with success probability $\int_{A}w(x){\rm d}x$, which we can take arbitrarily close to $1$ by
increasing the size of $A$, and finally such that $\alpha X + (1-\alpha)Y $ has the probability density $w$. Taking independent i.i.d. sequences of such random variables, $w(n^{1/2}x)n^{d/2}$ is the probability density of
${\displaystyle W_n := \frac{1}{\sqrt{n}}\sum_{j=1}^n \alpha_j X_j + \frac{1}{\sqrt{n}} \sum_{j=1}^n(1-\alpha_j)Y_j}$.
We are interested in estimating the expectation of $1_{B_R}(W_n)$. We first take the conditional expectation, given the values of the $\alpha$'s and the $Y$'s. These conditional expectations have the form
${\mathbb E}\left[ 1_{B_R + y}\left( \frac{1}{\sqrt{n}}\sum_{j=1}^n \alpha_j X_j \right)\right]$
for some translate $B_R +y$ of the unit Ball. Since $A$ is bounded, the $X_j$'s all have the same finite third moment, and now the Berry-Esseen Theorem \cite{B41,E42}, a version of the Central Limit Theorem
with rate information, allows us to control the error in approximating this expectation by
$\mathbb{E}(1_{B_R +y}(G))$ where $G$ is centered Gaussian with variance $\sigma^2$. By the choice of $\sigma$, this is no greater than $\epsilon/2$, independent of $y$. For $n$ large enough,
the remaining errors -- coming from the small probability that $\sum_{n=1}^n \alpha_j$ is significantly less $n$, and the error bound provided by the Berry-Esseen Theorem, are readily absorbed into the remaining
$\epsilon/2$ for large $n$. Thus for all sufficiently large $n$, the integral in (\ref{CLT2}) is no more than $\epsilon$.
\vfill
\eject
{\bf Acknowledgements}:
U.S.~National Science Foundation grants DMS-1764254 (E.A.C.), DMS-1802170 (I.J.) and NSF grant DMS-1856645 (M.P.L) are gratefully acknowledged.
\vskip20pt
\begin{thebibliography}{WWW99}
\bibitem[B41]{B41} A. Berry, {\em The Accuracy of the Gaussian Approximation to the Sum of Independent Variates}. Trans. of the A.M.S. {\bf 49} (1941),122-136.
\bibitem[CGR08]{CGR08} E.A. Carlen, E. Gabetta and E. Regazzini, {\it Probabilistic investigation on explosion of solutions of the Kac equation with infintte initial energy}, J. Appl. Prob. {\bf 45} (2008), 95-106
\bibitem[CJL19]{CJL19} E.A. Carlen, I. Jauslin and E.H. Lieb, {Analysis of a simple equation for the ground state energy of the Bose gas}, arXiv preprint arXiv:1912.04987.
\bibitem[E42]{E42} C.-G. Esseen, {\em A moment inequality with an application to the central limit theorem}. Skand. Aktuarietidskr. {\bf 39} 160-170.
\bibitem[LL96]{LL96} E.H. Lieb and M. Loss, {\em Analysis}, Graduate Studies in Mathematics {\bf 14}, A.M.S., Providence RI, 1996.
\bibitem[SW71]{SW71} E. Stein and G. Weiss, {\em Introduction to Fourier analysis on Euclidean spaces}, Princeton University Press, Princeton NJ, 1971.
\end{thebibliography}
\end{document}

34
Makefile Normal file
View File

@ -0,0 +1,34 @@
PROJECTNAME=$(basename $(wildcard *.tex))
LIBS=$(notdir $(wildcard libs/*))
PDFS=$(addsuffix .pdf, $(PROJECTNAME))
SYNCTEXS=$(addsuffix .synctex.gz, $(PROJECTNAME))
all: $(PROJECTNAME)
$(PROJECTNAME): $(LIBS)
pdflatex -file-line-error $@.tex
pdflatex -file-line-error $@.tex
pdflatex -synctex=1 $@.tex
$(SYNCTEXS): $(LIBS)
pdflatex -synctex=1 $(patsubst %.synctex.gz, %.tex, $@)
libs: $(LIBS)
$(LIBS):
ln -fs libs/$@ ./
clean-aux:
rm -f $(addsuffix .aux, $(PROJECTNAME))
rm -f $(addsuffix .log, $(PROJECTNAME))
rm -f $(addsuffix .out, $(PROJECTNAME))
rm -f $(addsuffix .toc, $(PROJECTNAME))
clean-libs:
rm -f $(LIBS)
clean-tex:
rm -f $(PDFS) $(SYNCTEXS)
clean: clean-aux clean-tex clean-libs

31
README Normal file
View File

@ -0,0 +1,31 @@
This directory contains the source files to typeset the article. This can be
accomplished by running
make
This document uses a custom class file, located in the 'libs' directory, which
defines a number of commands. Most of these are drop-in replacements for those
defined in the 'article' class.
Some extra functionality is provided in custom style files, located in the
'libs' directory.
* Dependencies:
pdflatex
TeXlive packages:
amsfonts
color
hyperref
latex
marginnote
GNU make
* Files:
Carlen_Jauslin_Lieb_Loss_2020.tex:
main LaTeX file
libs:
custom LaTeX class file

673
libs/ian.cls Normal file
View File

@ -0,0 +1,673 @@
%%
%% Ian's class file
%%
%% TeX format
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%% class name
\ProvidesClass{ian}[2017/09/29]
%% boolean to signal that this class is being used
\newif\ifianclass
%% options
% no section numbering in equations
\DeclareOption{section_in_eq}{\sectionsineqtrue}
\DeclareOption{section_in_fig}{\sectionsinfigtrue}
\DeclareOption{section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
\DeclareOption{section_in_all}{\sectionsineqtrue\sectionsinfigtrue\PassOptionsToPackage{section_in_theo}{iantheo}}
\DeclareOption{subsection_in_eq}{\subsectionsineqtrue}
\DeclareOption{subsection_in_fig}{\subsectionsinfigtrue}
\DeclareOption{subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
\DeclareOption{subsection_in_all}{\subsectionsineqtrue\subsectionsinfigtrue\PassOptionsToPackage{subsection_in_theo}{iantheo}}
\DeclareOption{no_section_in_eq}{\sectionsineqfalse}
\DeclareOption{no_section_in_fig}{\sectionsinfigfalse}
\DeclareOption{no_section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
\DeclareOption{no_section_in_all}{\sectionsineqfalse\sectionsinfigfalse\PassOptionsToPackage{no_section_in_theo}{iantheo}}
\DeclareOption{no_subsection_in_eq}{\subsectionsineqfalse}
\DeclareOption{no_subsection_in_fig}{\subsectionsinfigfalse}
\DeclareOption{no_subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
\DeclareOption{no_subsection_in_all}{\subsectionsineqfalse\subsectionsinfigfalse\PassOptionsToPackage{no_subsection_in_theo}{iantheo}}
% reset point
\DeclareOption{point_reset_at_section}{\PassOptionsToPackage{reset_at_section}{point}}
\DeclareOption{point_no_reset_at_section}{\PassOptionsToPackage{no_reset_at_section}{point}}
\DeclareOption{point_reset_at_theo}{\PassOptionsToPackage{reset_at_theo}{point}}
\DeclareOption{point_no_reset_at_theo}{\PassOptionsToPackage{no_reset_at_theo}{point}}
\def\ian@defaultoptions{
\ExecuteOptions{section_in_all, no_subsection_in_all}
\ProcessOptions
%% required packages
\RequirePackage{iantheo}
\RequirePackage{point}
\RequirePackage{color}
\RequirePackage{marginnote}
\RequirePackage{amssymb}
\PassOptionsToPackage{hidelinks}{hyperref}
\RequirePackage{hyperref}
}
%% paper dimensions
\setlength\paperheight{297mm}
\setlength\paperwidth{210mm}
%% fonts
\input{size11.clo}
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
%% text dimensions
\hoffset=-50pt
\voffset=-72pt
\textwidth=460pt
\textheight=704pt
%% remove default indentation
\parindent=0pt
%% indent command
\def\indent{\hskip20pt}
%% something is wrong with \thepage, redefine it
\gdef\thepage{\the\c@page}
%% array lines (to use the array environment)
\setlength\arraycolsep{5\p@}
\setlength\arrayrulewidth{.4\p@}
%% correct vertical alignment at the end of a document
\AtEndDocument{
\vfill
\eject
}
%% hyperlinks
% hyperlinkcounter
\newcounter{lncount}
% hyperref anchor
\def\hrefanchor{%
\stepcounter{lncount}%
\hypertarget{ln.\thelncount}{}%
}
%% define a command and write it to aux file
\def\outdef#1#2{%
% define command%
\expandafter\xdef\csname #1\endcsname{#2}%
% hyperlink number%
\expandafter\xdef\csname #1@hl\endcsname{\thelncount}%
% write command to aux%
\immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1\endcsname{\csname #1\endcsname}}%
\immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1@hl\endcsname{\thelncount}}%
}
%% can call commands even when they are not defined
\def\safe#1{%
\ifdefined#1%
#1%
\else%
{\color{red}\bf?}%
\fi%
}
%% define a label for the latest tag
%% label defines a command containing the string stored in \tag
\def\deflabel{
\def\label##1{\expandafter\outdef{label@##1}{\safe\tag}}
\def\ref##1{%
% check whether the label is defined (hyperlink runs into errors if this check is omitted)
\ifcsname label@##1@hl\endcsname%
\hyperlink{ln.\csname label@##1@hl\endcsname}{{\color{blue}\safe\csname label@##1\endcsname}}%
\else%
\ifcsname label@##1\endcsname%
{\color{blue}\csname ##1\endcsname}%
\else%
{\bf ??}%
\fi%
\fi%
}
}
%% make a custom link at any given location in the document
\def\makelink#1#2{%
\hrefanchor%
\outdef{label@#1}{#2}%
}
%% section command
% counter
\newcounter{sectioncount}
% space before section
\newlength\secskip
\setlength\secskip{40pt}
% a prefix to put before the section number, e.g. A for appendices
\def\sectionprefix{}
% define some lengths
\newlength\secnumwidth
\newlength\sectitlewidth
\def\section#1{
% reset counters
\stepcounter{sectioncount}
\setcounter{subsectioncount}{0}
\ifsectionsineq
\setcounter{seqcount}0
\fi
\ifsectionsinfig
\setcounter{figcount}0
\fi
% space before section (if not first)
\ifnum\thesectioncount>1
\vskip\secskip
\penalty-1000
\fi
% hyperref anchor
\hrefanchor
% define tag (for \label)
\xdef\tag{\sectionprefix\thesectioncount}
% get widths
\def\@secnum{{\bf\Large\sectionprefix\thesectioncount.\hskip10pt}}
\settowidth\secnumwidth{\@secnum}
\setlength\sectitlewidth\textwidth
\addtolength\sectitlewidth{-\secnumwidth}
% print name
\parbox{\textwidth}{
\@secnum
\parbox[t]{\sectitlewidth}{\Large\bf #1}}
% write to table of contents
\iftoc
% save lncount in aux variable which is written to toc
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@sec.\thesectioncount\endcsname{\thelncount}}
\write\tocoutput{\noexpand\tocsection{#1}{\thepage}}
\fi
%space
\par\penalty10000
\bigskip\penalty10000
}
%% subsection
% counter
\newcounter{subsectioncount}
% space before subsection
\newlength\subsecskip
\setlength\subsecskip{30pt}
\def\subsection#1{
% counters
\stepcounter{subsectioncount}
\setcounter{subsubsectioncount}{0}
\ifsubsectionsineq
\setcounter{seqcount}0
\fi
\ifsubsectionsinfig
\setcounter{figcount}0
\fi
% space before subsection (if not first)
\ifnum\thesubsectioncount>1
\vskip\subsecskip
\penalty-500
\fi
% hyperref anchor
\hrefanchor
% define tag (for \label)
\xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount}
% get widths
\def\@secnum{{\bf\large\hskip.5cm\sectionprefix\thesectioncount.\thesubsectioncount.\hskip5pt}}
\settowidth\secnumwidth{\@secnum}
\setlength\sectitlewidth\textwidth
\addtolength\sectitlewidth{-\secnumwidth}
% print name
\parbox{\textwidth}{
\@secnum
\parbox[t]{\sectitlewidth}{\large\bf #1}}
% write to table of contents
\iftoc
% save lncount in aux variable which is written to toc
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@subsec.\thesectioncount.\thesubsectioncount\endcsname{\thelncount}}
\write\tocoutput{\noexpand\tocsubsection{#1}{\thepage}}
\fi
% space
\par\penalty10000
\medskip\penalty10000
}
%% subsubsection
% counter
\newcounter{subsubsectioncount}
% space before subsubsection
\newlength\subsubsecskip
\setlength\subsubsecskip{20pt}
\def\subsubsection#1{
% counters
\stepcounter{subsubsectioncount}
% space before subsubsection (if not first)
\ifnum\thesubsubsectioncount>1
\vskip\subsubsecskip
\penalty-500
\fi
% hyperref anchor
\hrefanchor
% define tag (for \label)
\xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount}
% get widths
\def\@secnum{{\bf\hskip1.cm\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount.\hskip5pt}}
\settowidth\secnumwidth{\@secnum}
\setlength\sectitlewidth\textwidth
\addtolength\sectitlewidth{-\secnumwidth}
% print name
\parbox{\textwidth}{
\@secnum
\parbox[t]{\sectitlewidth}{\large\bf #1}}
% write to table of contents
\iftoc
% save lncount in aux variable which is written to toc
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@subsubsec.\thesectioncount.\thesubsectioncount.\thesubsubsectioncount\endcsname{\thelncount}}
\write\tocoutput{\noexpand\tocsubsubsection{#1}{\thepage}}
\fi
% space
\par\penalty10000
\medskip\penalty10000
}
%% itemize
\newlength\itemizeskip
% left margin for items
\setlength\itemizeskip{20pt}
\newlength\itemizeseparator
% space between the item symbol and the text
\setlength\itemizeseparator{5pt}
% penalty preceding an itemize
\newcount\itemizepenalty
\itemizepenalty=0
% counter counting the itemize level
\newcounter{itemizecount}
% item symbol
\def\itemizept#1{
\ifnum#1=1
\textbullet
\else
$\scriptstyle\blacktriangleright$
\fi
}
\newlength\current@itemizeskip
\setlength\current@itemizeskip{0pt}
\def\itemize{%
\par\expandafter\penalty\the\itemizepenalty\medskip\expandafter\penalty\the\itemizepenalty%
\addtocounter{itemizecount}{1}%
\addtolength\current@itemizeskip{\itemizeskip}%
\leftskip\current@itemizeskip%
}
\def\enditemize{%
\addtocounter{itemizecount}{-1}%
\addtolength\current@itemizeskip{-\itemizeskip}%
\par\expandafter\penalty\the\itemizepenalty\leftskip\current@itemizeskip%
\medskip\expandafter\penalty\the\itemizepenalty%
}
% item, with optional argument to specify the item point
% @itemarg is set to true when there is an optional argument
\newif\if@itemarg
\def\item{%
% check whether there is an optional argument (if there is none, add on empty '[]')
\@ifnextchar [{\@itemargtrue\@itemx}{\@itemargfalse\@itemx[]}%
}
\newlength\itempt@total
\def\@itemx[#1]{
\if@itemarg
\settowidth\itempt@total{#1}
\else
\settowidth\itempt@total{\itemizept\theitemizecount}
\fi
\addtolength\itempt@total{\itemizeseparator}
\par
\medskip
\if@itemarg
\hskip-\itempt@total#1\hskip\itemizeseparator
\else
\hskip-\itempt@total\itemizept\theitemizecount\hskip\itemizeseparator
\fi
}
%% prevent page breaks after itemize
\newcount\previtemizepenalty
\def\nopagebreakafteritemize{
\previtemizepenalty=\itemizepenalty
\itemizepenalty=10000
}
%% back to previous value
\def\restorepagebreakafteritemize{
\itemizepenalty=\previtemizepenalty
}
%% enumerate
\newcounter{enumerate@count}
\def\enumerate{
\setcounter{enumerate@count}0
\let\olditem\item
\let\olditemizept\itemizept
\def\item{
% counter
\stepcounter{enumerate@count}
% set header
\def\itemizept{\theenumerate@count.}
% hyperref anchor
\hrefanchor
% define tag (for \label)
\xdef\tag{\theenumerate@count}
\olditem
}
\itemize
}
\def\endenumerate{
\enditemize
\let\item\olditem
\let\itemizept\olditemizept
}
%% equation numbering
% counter
\newcounter{seqcount}
% booleans (write section or subsection in equation number)
\newif\ifsectionsineq
\newif\ifsubsectionsineq
\def\seqcount{
\stepcounter{seqcount}
% the output
\edef\seqformat{\theseqcount}
% add subsection number
\ifsubsectionsineq
\let\tmp\seqformat
\edef\seqformat{\thesubsectioncount.\tmp}
\fi
% add section number
\ifsectionsineq
\let\tmp\seqformat
\edef\seqformat{\sectionprefix\thesectioncount.\tmp}
\fi
% define tag (for \label)
\xdef\tag{\seqformat}
% write number
\marginnote{\hfill(\seqformat)}
}
%% equation environment compatibility
\def\equation{\hrefanchor$$\seqcount}
\def\endequation{$$\@ignoretrue}
%% figures
% counter
\newcounter{figcount}
% booleans (write section or subsection in equation number)
\newif\ifsectionsinfig
\newif\ifsubsectionsinfig
% width of figures
\newlength\figwidth
\setlength\figwidth\textwidth
\addtolength\figwidth{-2.5cm}
% caption
\def\defcaption{
\long\def\caption##1{
\stepcounter{figcount}
% hyperref anchor
\hrefanchor
% the number of the figure
\edef\figformat{\thefigcount}
% add subsection number
\ifsubsectionsinfig
\let\tmp\figformat
\edef\figformat{\thesubsectioncount.\tmp}
\fi
% add section number
\ifsectionsinfig
\let\tmp\figformat
\edef\figformat{\sectionprefix\thesectioncount.\tmp}
\fi
% define tag (for \label)
\xdef\tag{\figformat}
% write
\hfil fig \figformat: \parbox[t]{\figwidth}{\leavevmode\small##1}
% space
\par\bigskip
}
}
%% short caption: centered
\def\captionshort#1{
\stepcounter{figcount}
% hyperref anchor
\hrefanchor
% the number of the figure
\edef\figformat{\thefigcount}
% add section number
\ifsectionsinfig
\let\tmp\figformat
\edef\figformat{\sectionprefix\thesectioncount.\tmp}
\fi
% define tag (for \label)
\xdef\tag{\figformat}
% write
\hfil fig \figformat: {\small#1}
%space
\par\bigskip
}
%% environment
\def\figure{
\par
\vfil\penalty100\vfilneg
\bigskip
}
\def\endfigure{
\par
\bigskip
}
%% start appendices
\def\appendix{
\vfill
\pagebreak
% counter
\setcounter{sectioncount}0
% prefix
\def\sectionprefix{A}
% write
{\bf \LARGE Appendices}\par\penalty10000\bigskip\penalty10000
% add a mention in the table of contents
\iftoc
\immediate\write\tocoutput{\noexpand\tocappendices}\penalty10000
\fi
%% uncomment for new page for each appendix
%\def\seqskip{\vfill\pagebreak}
}
%% bibliography
% size of header
\newlength\bibheader
\def\thebibliography#1{
\hrefanchor
% add a mention in the table of contents
\iftoc
% save lncount in aux variable which is written to toc
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@references\endcsname{\thelncount}}
\write\tocoutput{\noexpand\tocreferences{\thepage}}\penalty10000
\fi
% write
{\bf \LARGE References}\par\penalty10000\bigskip\penalty10000
% width of header
\settowidth\bibheader{[#1]}
\leftskip\bibheader
}
% end environment
\def\endthebibliography{
\par\leftskip0pt
}
%% bibitem command
\def\bibitem[#1]#2{%
\hrefanchor%
\outdef{label@cite#2}{#1}%
\hskip-\bibheader%
\makebox[\bibheader]{\cite{#2}\hfill}%
}
%% cite command (adapted from latex.ltx)
% @tempswa is set to true when there is an optional argument
\newif\@tempswa
\def\cite{%
% check whether there is an optional argument (if there is none, add on empty '[]')
\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}%
}
% command with optional argument
\def\@citex[#1]#2{\leavevmode%
% initialize loop
\let\@citea\@empty%
% format
\@cite{%
% loop over ',' separated list
\@for\@citeb:=#2\do{%
% text to add at each iteration of the loop (separator between citations)
\@citea\def\@citea{,\ }%
% add entry to citelist
\@writecitation{\@citeb}%
\ref{cite\@citeb}%
}%
}%
% add optional argument text (as an argument to '\@cite')
{#1}%
}
\def\@cite#1#2{%
[#1\if@tempswa , #2\fi]%
}
%% add entry to citelist after checking it has not already been added
\def\@writecitation#1{%
\ifcsname if#1cited\endcsname%
\else%
\expandafter\newif\csname if#1cited\endcsname%
\immediate\write\@auxout{\string\citation{#1}}%
\fi%
}
%% table of contents
% boolean
\newif\iftoc
\def\tableofcontents{
{\bf \large Table of contents:}\par\penalty10000\bigskip\penalty10000
% copy content from file
\IfFileExists{\jobname.toc}{\input{\jobname.toc}}{{\tt error: table of contents missing}}
% open new toc
\newwrite\tocoutput
\immediate\openout\tocoutput=\jobname.toc
\toctrue
}
%% close file
\AtEndDocument{
% close toc
\iftoc
\immediate\closeout\tocoutput
\fi
}
%% fill line with dots
\def\leaderfill{\leaders\hbox to 1em {\hss. \hss}\hfill}
%% same as sectionprefix
\def\tocsectionprefix{}
%% toc formats
\newcounter{tocsectioncount}
\def\tocsection #1#2{
\stepcounter{tocsectioncount}
\setcounter{tocsubsectioncount}{0}
\setcounter{tocsubsubsectioncount}{0}
% write
\smallskip\hyperlink{ln.\csname toc@sec.\thetocsectioncount\endcsname}{{\bf \tocsectionprefix\thetocsectioncount}.\hskip5pt {\color{blue}#1}\leaderfill#2}\par
}
\newcounter{tocsubsectioncount}
\def\tocsubsection #1#2{
\stepcounter{tocsubsectioncount}
\setcounter{tocsubsubsectioncount}{0}
% write
{\hskip10pt\hyperlink{ln.\csname toc@subsec.\thetocsectioncount.\thetocsubsectioncount\endcsname}{{\bf \thetocsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
}
\newcounter{tocsubsubsectioncount}
\def\tocsubsubsection #1#2{
\stepcounter{tocsubsubsectioncount}
% write
{\hskip20pt\hyperlink{ln.\csname toc@subsubsec.\thetocsectioncount.\thetocsubsectioncount.\thetocsubsubsectioncount\endcsname}{{\bf \thetocsubsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
}
\def\tocappendices{
\medskip
\setcounter{tocsectioncount}0
{\bf Appendices}\par
\smallskip
\def\tocsectionprefix{A}
}
\def\tocreferences#1{
\medskip
{\hyperlink{ln.\csname toc@references\endcsname}{{\color{blue}\bf References}\leaderfill#1}}\par
\smallskip
}
%% definitions that must be loaded at begin document
\let\ian@olddocument\document
\def\document{
\ian@olddocument
\deflabel
\defcaption
}
%% end
\ian@defaultoptions
\endinput

162
libs/iantheo.sty Normal file
View File

@ -0,0 +1,162 @@
%%
%% iantheorem package:
%% Ian's customized theorem command
%%
%% boolean to signal that this package was loaded
\newif\ifiantheo
%% TeX format
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%% package name
\ProvidesPackage{iantheo}[2016/11/10]
%% options
\newif\ifsectionintheo
\DeclareOption{section_in_theo}{\sectionintheotrue}
\DeclareOption{no_section_in_theo}{\sectionintheofalse}
\newif\ifsubsectionintheo
\DeclareOption{subsection_in_theo}{\subsectionintheotrue}
\DeclareOption{no_subsection_in_theo}{\subsectionintheofalse}
\def\iantheo@defaultoptions{
\ExecuteOptions{section_in_theo, no_subsection_in_theo}
\ProcessOptions
%%% reset at every new section
\ifsectionintheo
\let\iantheo@oldsection\section
\gdef\section{\setcounter{theocount}{0}\iantheo@oldsection}
\fi
%% reset at every new subsection
\ifsubsectionintheo
\let\iantheo@oldsubsection\subsection
\gdef\subsection{\setcounter{theocount}{0}\iantheo@oldsubsection}
\fi
}
%% delimiters
\def\delimtitle#1{
\par%
\leavevmode%
\raise.3em\hbox to\hsize{%
\lower0.3em\hbox{\vrule height0.3em}%
\hrulefill%
\ \lower.3em\hbox{#1}\ %
\hrulefill%
\lower0.3em\hbox{\vrule height0.3em}%
}%
\par\penalty10000%
}
%% callable by ref
\def\delimtitleref#1{
\par%
%
\ifdefined\ianclass%
% hyperref anchor%
\hrefanchor%
% define tag (for \label)%
\xdef\tag{#1}%
\fi%
%
\leavevmode%
\raise.3em\hbox to\hsize{%
\lower0.3em\hbox{\vrule height0.3em}%
\hrulefill%
\ \lower.3em\hbox{\bf #1}\ %
\hrulefill%
\lower0.3em\hbox{\vrule height0.3em}%
}%
\par\penalty10000%
}
%% no title
\def\delim{
\par%
\leavevmode\raise.3em\hbox to\hsize{%
\lower0.3em\hbox{\vrule height0.3em}%
\hrulefill%
\lower0.3em\hbox{\vrule height0.3em}%
}%
\par\penalty10000%
}
%% end delim
\def\enddelim{
\par\penalty10000%
\leavevmode%
\raise.3em\hbox to\hsize{%
\vrule height0.3em\hrulefill\vrule height0.3em%
}%
\par%
}
%% theorem
% counter
\newcounter{theocount}
% booleans (write section or subsection in equation number)
\def\theo#1{
\stepcounter{theocount}
\ifdefined\ianclass
% hyperref anchor
\hrefanchor
\fi
% the number
\def\formattheo{\thetheocount}
% add subsection number
\ifsubsectionintheo
\let\tmp\formattheo
\edef\formattheo{\thesubsectioncount.\tmp}
\fi
% add section number
\ifsectionintheo
\let\tmp\formattheo
\edef\formattheo{\sectionprefix\thesectioncount.\tmp}
\fi
% define tag (for \label)
\xdef\tag{\formattheo}
% write
\delimtitle{\bf #1 \formattheo}
}
\let\endtheo\enddelim
%% theorem headers with name
\def\theoname#1#2{
\theo{#1}\hfil({\it #2})\par\penalty10000\medskip%
}
%% qed symbol
\def\qedsymbol{$\square$}
\def\qed{\penalty10000\hfill\penalty10000\qedsymbol}
%% compatibility with article class
\ifdefined\ianclasstrue
\relax
\else
\def\thesectioncount{\thesection}
\def\thesubsectioncount{\thesubsection}
\def\sectionprefix{}
\fi
%% prevent page breaks after displayed equations
\newcount\prevpostdisplaypenalty
\def\nopagebreakaftereq{
\prevpostdisplaypenalty=\postdisplaypenalty
\postdisplaypenalty=10000
}
%% back to previous value
\def\restorepagebreakaftereq{
\postdisplaypenalty=\prevpostdisplaypenalty
}
%% end
\iantheo@defaultoptions
\endinput

107
libs/point.sty Normal file
View File

@ -0,0 +1,107 @@
%%
%% Points package:
%% \point commands
%%
%% TeX format
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%% package name
\ProvidesPackage{point}[2017/06/13]
%% options
\newif\ifresetatsection
\DeclareOption{reset_at_section}{\resetatsectiontrue}
\DeclareOption{no_reset_at_section}{\resetatsectionfalse}
\newif\ifresetatsubsection
\DeclareOption{reset_at_subsection}{\resetatsubsectiontrue}
\DeclareOption{no_reset_at_subsection}{\resetatsubsectionfalse}
\newif\ifresetattheo
\DeclareOption{reset_at_theo}{\resetattheotrue}
\DeclareOption{no_reset_at_theo}{\resetattheofalse}
\def\point@defaultoptions{
\ExecuteOptions{reset_at_section, reset_at_subsection, no_reset_at_theo}
\ProcessOptions
%% reset at every new section
\ifresetatsection
\let\point@oldsection\section
\gdef\section{\resetpointcounter\point@oldsection}
\fi
%% reset at every new subsection
\ifresetatsubsection
\let\point@oldsubsection\subsection
\gdef\subsection{\resetpointcounter\point@oldsubsection}
\fi
%% reset at every new theorem
\ifresetattheo
\ifdefined\iantheotrue
\let\point@oldtheo\theo
\gdef\theo{\resetpointcounter\point@oldtheo}
\fi
\fi
}
%% point
% counter
\newcounter{pointcount}
\def\point{
\stepcounter{pointcount}
\setcounter{subpointcount}{0}
% hyperref anchor (only if the class is 'ian')
\ifdefined\ifianclass
\hrefanchor
% define tag (for \label)
\xdef\tag{\arabic{pointcount}}
\fi
% header
\indent{\bf \arabic{pointcount}\ - }
}
%% subpoint
% counter
\newcounter{subpointcount}
\def\subpoint{
\stepcounter{subpointcount}
\setcounter{subsubpointcount}0
% hyperref anchor (only if the class is 'ian')
\ifdefined\ifianclass
\hrefanchor
% define tag (for \label)
\xdef\tag{\arabic{pointcount}-\arabic{subpointcount}}
\fi
% header
\indent\hskip.5cm{\bf \arabic{pointcount}-\arabic{subpointcount}\ - }
}
%% subsubpoint
% counter
\newcounter{subsubpointcount}
\def\subsubpoint{
\stepcounter{subsubpointcount}
% hyperref anchor (only if the class is 'ian')
\ifdefined\ifianclass
\hrefanchor
% define tag (for \label)
\xdef\tag{\arabic{pointcount}-\arabic{subpointcount}-\arabic{subsubpointcount}}
\fi
\indent\hskip1cm{\bf
\arabic{pointcount}-\arabic{subpointcount}-\arabic{subsubpointcount}\ - }
}
%% reset point counters
\def\resetpointcounter{
\setcounter{pointcount}{0}
\setcounter{subpointcount}{0}
\setcounter{subsubpointcount}{0}
}
%% end
\point@defaultoptions
\endinput