Michael Orlitzky [Thu, 25 Jul 2024 16:16:37 +0000 (12:16 -0400)]
GNUmakefile: use a separate build directory
This is mainly to support a preview workflow with zathura, which likes
to crash or go blank or lose your position in the document during
renames. But it's also just nicer, and will probably keep e.g. atril
from flickering as well.
GNUmakefile: simplify recursive logic and eliminate a "pdflatex" call.
In the recursive $(MAKE), the sub-$(MAKE) can succeed and then
subsequently delete its "previous" file. When that returns control to
the parent $(MAKE), the parent will try to diff the (now missing)
"previous" file against the latest one, which of course fails. This
leads to an extra build of the same, current, not-gonna-change PDF.
A slight change in the logic both simplifies things and eliminates
that extra rebuild. Thanks to Wojtek Kosior who pointed out the bug in
an email.
Michael Orlitzky [Tue, 10 Dec 2019 20:28:47 +0000 (15:28 -0500)]
Add \unit{} for the multiplicative identity element.
Technically we could pass off \identity{X} as the multiplicative
identity element in an algebraic structure, by using the "arrow"
interpretation in the right category. But let's not try to shoot
ourselves in the foot too hard, yeah?
mjo-common: prevent \Sn[1] and \Hn[1] from dropping their superscripts.
This was a TODO item for a while; a standalone "S" or "H" doesn't have
the same meaning as, say, a standalone \mathbb{R} does. The "n"
doesn't indicate the arity of a Cartesian product, so for example S^2
isn't two copies of S^1. Dropping the superscript was therefore
misleading (and nonstandard notation).
Michael Orlitzky [Fri, 25 Oct 2019 22:31:14 +0000 (18:31 -0400)]
mjo-proof_by_cases.tex: indent the cases and use italics for "Case N".
This is an aesthetic choice that will probably change every time I
write a paper that uses this environment. In my current endeavor, I
think having the cases indented is necessary to separate them from the
rest of the document (to show that they're still part of the current
theorem/proof). Moreover the use of italics keeps the reader from
lumping the "Case N" in with the stream of bold Definitions,
Propositions, Theorems, and Examples surrounding them.
I've checked that this change isn't fatal to either my thesis
(double-spaced) or my polyhedral positive operators paper.
Michael Orlitzky [Sun, 15 Sep 2019 21:01:48 +0000 (17:01 -0400)]
Put \ifx guards on most other package includes, too.
We shouldn't be trying to load "amsopn" ten times, for example. But
testing whether or not a package is loaded is tricky. First, I tried
the \@ifpackageloaded macro: that causes problems with some of my
existing documents, and the "spacefactor" error that results is
apparently a FAQ. But I don't know what to do about it.
The other way to test if a package is loaded is by checking for some
(unique?) macro that it defines. That's what I've guessed at here. It
works in most cases, like when we want \operatorname from "amsopn."
But, some packages also didn't have something obvious to check for, so
coverage isn't 100%.
Michael Orlitzky [Sun, 15 Sep 2019 20:51:23 +0000 (16:51 -0400)]
Replace all uses of \providecommand with \newcommand.
We generally want to know if some of our macros aren't being used. But
before introducing the \ifx guards on file includes, we were forced to
use \providecommand in e.g. mjo-common.tex, since it gets included
more than once. Now that we have the guards, change all
\providecommands to \newcommands.
Michael Orlitzky [Sun, 15 Sep 2019 20:16:08 +0000 (16:16 -0400)]
Wrap all mjotex files in conditionals to prevent double-loading.
I plan to start putting glossary entries in mjo-common, and that
reveals a problem: some files (i.e. mjo-common.tex) get loaded more
than once. And there's not always a way to ignore the duplicate
definitions. So, finally, after avoiding it for as long as possible,
I've wrapped everything in "ifx" tests that check the value of a
macro I define (just like #ifdef HAVE_FOO in C).
The \ifx test was chosen over of \ifdefined (which is an e-TeX
primitive) because it makes the conditional simpler; we don't need to
have an empty "if" block. Of course, testing against \undefined only
works if \undefined is... undefined. But theoretically someone could
probably redefine \ifdefined, too. Whatever. I can change it if it
ever causes a problem.