Can you spot any difference between $$$max$$$ and $$$\text{max}$$$ or $$$dp$$$ and $$$\text{dp}$$$?
How about $$$\lfloor \frac{max(a, b, c)}{b} \rfloor$$$ and $$$\left \lfloor \frac{\max(a, b, c)}{b} \right \rfloor$$$? Or even $$$\displaystyle \left \lfloor \frac{\max(a, b, c)}{b} \right \rfloor$$$!
While appreciating the efforts and the careful elaborate writing of the authors, I have faced many issues with latex writing in editorials that have frustrated me while reading over the years, so I thought of writing this blog to settle many of such issues and making our equations in editorials the prettiest possible.
I'm going to use this editorial in problem F div 1 an example and refer to it in things that can be improved. Of course, that doesn't mean any offence to satyam343's beautiful and careful writing of the editorial nor his/her LaTeX writing/skills, he/she has done it beautifully.
Also, note that any code that is quoted in this blog like this
will be assumed to be enclosed between two dollar signs to represent LaTeX writing.
Tip 1. No italic writings in LaTeX
If we look at hint 1 in the editorial, we can see the author wrote $$$frequency[0]$$$ by just writing frequency[0]
. The way I would recommend writing something like this is to use the command \text{your text}
which makes a huge difference.
If you write it as \text{frequency}[0]
, it will appear as $$$\text{frequency}[0]$$$. More pretty, right?
You can even notice the difference if we made it as a block equation of sums (with two dollar signs)
instead of
Another example is when editorials are explaining a DP solution, they write $$$dp(i, j, k)$$$ or $$$DP(i, j, k)$$$ or $$$dp[i][j][k]$$$. One example is the same referenced editorial writes $$$dp[l][suff\_sum]$$$ as dp[l][suff\\_sum]
The way I recommend writing this is \text{dp}[l][\text{suff}\\_\text{sum}]
which renders as $$$\text{dp}[l][\text{suff}\_\text{sum}]$$$, a big difference! In a similar manner, you can also write $$$\text{dp}(i, j, k)$$$ or $$$\text{DP}(i, j, k)$$$. I prefer $$$\text{dp}[i][j][k]$$$ using square brackets and a non-italic "dp."
You can see this can change $$$d = suff\_sum + initial\_cur\_sum$$$ to $$$d = \text{suff}\_\text{sum} + \text{initial}\_\text{cur}\_\text{sum}$$$. If it's annoying to write \text
every time, just copy it and polish the whole text with it once in the end.
Of course, the standard is that up to preference, I recommend not using \text
for one letter variables, like $$$x, y, z, a, b, c, l$$$ (we can see they would look like this $$$\text{x}, \text{y}, \text{z}, \text{a}, \text{b}, \text{c}, \text{l}$$$). However, two letters or more, \text
makes it more clear and readable.
One final note in this regard: some functions in LaTeX are special and only need \
and no text
like $$$\max, \min$$$, and $$$\gcd$$$. I wrote this like \max
, \min
, \gcd
and not using \text
. You can see $$$\max(a, b, c)$$$ is way better than $$$max(a, b, c)$$$ same with $$$\gcd(a, b, c)$$$ and $$$gcd(a, b, c)$$$.
Tip 2. Enclosing brackets
This is to change
to
There were differences explained in the previous tip, but this tip focuses on the parenthesis.
The first was rendered using the code is
dp[i][new\_suffix\_max] = \max(dp[i][new\_suffix\_max], \min\limits_{k = p-1}^{i} best[k] + cost)
and the second was using
\text{dp}[i][\text{new}\_\text{suffix}\_\text{max}] = \max\left(\text{dp}[i][\text{new}\_\text{suffix}\_\text{max}], \min\limits_{k = p-1}^{i} \text{best}[k] + \text{cost}\right)
The major change I want to highlight is \left(
and right)
to enclose the parenthesis. This is when your parenthesis include some fraction, summation, minimum/maximum with limits, integration, exponentation, ...etc. The parenthesis or brackets are enlarged to enclose your expression.
Let's have some examples for comparison:
- $$$dp[x] = dp[\frac{max(x + 1, 1)}{2}] + 1$$$ vs $$$\text{dp}[x] = \text{dp}\left[\frac{\max(x + 1, 1)}{2}\right] + 1$$$.
- $$$\lfloor \frac{\max(0, 1 - d)}{2} \rfloor$$$ vs $$$\left\lfloor \frac{\max(0, 1 - d)}{2} \right\rfloor$$$
- Consider the difference between $$$\displaystyle gcd(x + \sum_{i = 1}^n a_i + y, z)$$$ and $$$\displaystyle \gcd\left(x + \sum_{i = 1}^n a_i + y, z\right)$$$. The parenthesis were enlarged to enclose the summation inside.
Final random tips for LaTeX and editorials in general
- Use block equations. When you feel like your equation is a bit too big, use two dollar signs instead of one to enclose your equation. That makes them block in one separate line instead of inline. It's OK that it makes the editorial bigger; readability beats size.
- Separate your paragraphs with new lines whenever it becomes crowded. Worry less about that the editorial becoming too big than it being cramped and unclear. Seek clarity.
- Use
\dots
.
- Use
\displaystyle
- Use
\cdot
to denote a product, not*
.
- Use subscripts if needed.
- Please, in problems like this, don't put names inside dollar signs to highlight. Use bold text. Write " Abdullah and Kifah " using
**Abdullah** and **Kifah**
, don't write "$$$Abdullah$$$ and $$$Kifah$$$" using$$$Abdullah$$$ and $$$Kifah$$$
. If for some reason you insist on using dollar signs, use\text
and display it as $$$\text{Abdullah}$$$ and $$$\text{Kifah}$$$
- Never leave a variable without dollar signs. Don't say "an array of n elements", say "an array of $$$n$$$ elements".
Finally, if anyone has any other tips that I can add, please don't hesitate to share with us in the comments.
Bravo.
I think
\times
is also a good choice: $$$2\times 4$$$.I think we shouldn't use program language in math formula: $$$a=a+1$$$ or $$$a\gets a+1$$$
a\gets a+1
?I think we should use
a\pmod b=c
$$$a\bmod b=c$$$ instead ofa\mod b=c
$$$a\mod b=c$$$, and usea\equiv b\pmod c
$$$a\equiv b\pmod c$$$ instead of other strange ways.GCD has it's
\gcd
$$$\gcd$$$, LCM doesn't. But LCM has\operatorname{lcm}
$$$\operatorname{lcm}$$$ though looks no difference from\text{lcm}
$$$\text{lcm}$$$.I don't like
\times
to be honest except in special scenarios, but that's probably a matter of personal preference (I prefercdot
, and it's more common in mathematical texts).For assignment commands, I'd recommend $$$a := a + 1$$$ (
a := a + 1
) instead of $$$a \gets a + 1$$$ (a \gets a + 1
), but that's also personal preference. But now that I think about it, $$$:=$$$ is read as "is defined to be," so may be $$$\gets$$$ is more appropriate.Yes. Due to the habits of the academic community around me, there are some difference.
:=
is also very commonly used, I forgot it, I'm sorry.But mathematically speaking, it is best not to use
\cdot
in the middle of numbers,\times
signs are better (at least in hand writing). Poor me lost two point last exam because this. Anyway both\cdot
and\times
are better than just a*
.A pedantic $$$TeX$$$ nician here...
For math operators like lcm, I suggest using
\mathop{\mathrm{lcm}}
, because it gives a better spacing control than just\text{lcm}
, and also it works as a big operator, like: $$$\displaystyle \mathop{\mathrm{lcm}}_{k=1}^{n} a_k$$$ (\gcd
also works as a big operator, so my definition provides feature parity with\gcd
). [UPD: Also look at the post about\operatorname
below.]In the case of mod, using
\pmod
as a binary operator may not be a best choice, because\pmod
is originally meant for your latter usage (parenthesized modulo). I think\mathbin{\mathrm{mod}}
is more appropriate when it's used as a binary operator ($$$a \mathbin{\mathrm{mod}} b$$$), or maybe\mathbin{\%}
looks even better: $$$a \mathbin{\%} b$$$. [UPD: Also look at the post mentioning\bmod
below.]For $$$\times$$$, I would avoid using it except for the matrix dimension (like "an $$$n \times m$$$ matrix"), because avoiding $$$\times$$$ and $$$\div$$$ is mostly a convention in math typesetting (except for elementary school textbooks), but I admit this is largely a matter of taste.
I agree with everything you said except for the way you wrote $$$\TeX$$$ :"D
Oops! I'm leaving it as is to publicly shame myself, so I wouldn't forget putting a backslash again...
For the binary mod there is
\bmod
: $$$a \bmod b = c$$$.For the $$$\times$$$, I recall some journal math style guides actually only allow
\times
, because it's more difficult to miss. Here in statements though we stick to\cdot
for consistency.Is
\mathop
in any way better than\operatorname
?Thank you for pointing out about
\bmod
.I didn't know about
\operatorname
and just googled about it a little bit. Apparently\mathop
is a primitive command from plain TeX, and\operatorname
comes from AMSMath. Actually, there are two variants:\operatorname
and\operatorname*
. The latter is meant for an operator that also works as a big operator (like\lim
or\max
), and the former is for something that can't be big (like\sin
or\log
).Here are some samples:
\operatorname{func} x, \operatorname{func}(x), \operatorname{dp}[x]
: $$$\operatorname{func} x, \operatorname{func}(x), \operatorname{dp}[x]$$$.\operatorname*{lcm}_{k=1}^{n} a_n
: $$$\displaystyle \operatorname*{lcm}_{k=1}^{n} a_n$$$.I think
\operatorname
and\operatorname*
are better for having control over whether the operator can be big or not (also it automatically applies\mathrm
for you).An insignificant addition but I always write algorithmic complexity as
\mathcal{O}(N)
$$$\mathcal{O}(N)$$$ instead of justO(N)
$$$O(N)$$$ purely for aesthetic reasons.Note that to view the difference properly you might want to change your math renderer into "Common HTML" or "SVG" (you can do it by right-clicking a LaTeX formula):
The big-O notation $$$O(n)$$$ is actually a part of so-called Bachmann-Landau notations, like $$$o(n)$$$, $$$\Omega(n)$$$ or $$$\Theta(n)$$$. I personally would like to avoid using a curly O for $$$O(n)$$$ for consistency with other notations, because other symbols are never be written in a calligraphic font.
for the equations enclosed with two dollar signs instead of one, remember to put the punctuation right before the last two dollar signs instead of after. dont do this:
. instead, do this:
this is so that the punctuation doesn't go on the next line.
alternatively just look at this https://web.evanchen.cc/latex-style-guide.html
Thanks for a great blog! I think you presented a pretty nice way to handle long variable names.
What do you think about mixing subscripts ($$$a_i$$$) with the square bracket operator ($$$a[i]$$$)? There's a way to stick to the former, with something like $$$\text{dp}_{i,j}$$$, but it gets messy very quickly. On the other hand, you have to use subscripts for sequences defined in the statement. They are pretty interchangeable anyway, but it still bothers me sometimes.
I think it wouldn't hurt to mention the change of notation at the beginning of the editorial.
I still prefer $$$\text{dp}[i][j]$$$ specially when the indices are large. So, for $$$\text{dp}_{i, j + k}$$$ it's ok to use subscripts, but for something like
square braces are preferred for sure.
Ah cool
Yes thank you!!
I have a comment though. There is no reason to replace lower dots (
...
) with middle dots (\dots
). It may make sense, for example, in matrix placeholders:But if you just want three dots with the proper spacing and stuff, you can use
\ldots
(because I find $$$1+2+\dots+n$$$ weirder than $$$1+2+\ldots+n$$$).In the example in the blog, it seems that
...
did mess up the spacing, so yes may beldots
would be the optimal recommendation.Thanks for the valuable insights and feedback!
In conventional math typesetting,
\ldots
($$$\ldots$$$) and\cdots
($$$\cdots$$$) are used differently in the following manner:\ldots
is used within an enumeration.a_1, a_2, \ldots, a_n
: $$$a_1, a_2, \ldots, a_n$$$.\cdots
is used between operators.a_1 + a_2 + \cdots + a_n
: $$$a_1 + a_2 + \cdots + a_n$$$.\dots
is a variant that automatically detects these two usage patterns and becomes\ldots
or\cdots
accordingly. Here are\dots
versions of the above examples:a_1, a_2, \dots, a_n
: $$$a_1, a_2, \dots, a_n$$$,a_1 + a_2 + \dots + a_n
: $$$a_1 + a_2 + \dots + a_n$$$.Oh cool, I didn't know this! Maybe I prefer
\ldots
because it's more common in russian literature (like\geqslant
$$$\geqslant$$$ instead of\geq
$$$\geq$$$ or\varnothing
$$$\varnothing$$$ instead of\emptyset
$$$\emptyset$$$) or it's just my taste, but I didn't know that\dots
was smarter than\cdots
Some more tips:
\le
and\ge
for $$$\le$$$ and $$$\ge$$$ (or\leqslant
,\geqslant
if you prefer) instead of writing<=
, which shows up as $$$<=$$$ and is really ugly.\pmod
for things like $$$7 \equiv 2 \pmod{5}$$$ (7 \equiv 2 \pmod{5}
) and\bmod
for things like $$$7 \bmod 5 = 2$$$ (7 \bmod 5 = 2
). If you use the wrong one (or\mod
), then the spacing will look weird and off.orz