B Formatting Guidelines
Author: Martin Lysy, Trang Bui
Last Updated: Feb 04, 2021
B.1 General
For a module, name your file starting with
mod_
and for a appendix, name your file starting withapp_
.For headers, place a space between the last sharp symbol \(\#\) and the name of the header.
Let’s agree to use regular font for programming languages (e.g., R, Python, C++) and bold font for packages and libraries (e.g., TMB, rstan, NumPy, Tensorflow). Use
code
font for files, data sets, codes and arguments. For functions, use parentheses at the end, for example,my_func()
. Use curly brackets\bm{}
for LaTeX functions. Use<kbd>Key</kbd>
for key strokes or buttons.Paste a link to packages which are mentioned for the first time. For R packages, you can use the
cran_link()
function to do this. For example, rstan.Please see Appendix B.2.3 for how to handle citations.
To refer to figures/tables/sections, use the standard academic style is e.g., “Figure 2”, “Section 2.5”, etc. In other words, the word is non-bold and non-italic, with the first letter capitalized, and the number following the word should have hyperlink. See relevant bookdown chapter for how to do this. To refer to modules, use the text name, details can be found here.
Refer to
common_functions.R
for commonly used functions across modules before writing your own.To make cross-referencing consistent in bookdown, for all labels – code chunks, figures, tables, sections, equations, etc. – use the prefix of the corresponding file as the prefix of any label. So please choose and use a module-specific prefix for each cross-reference. For example, use label
#formatguide
for this section. Refer toprefixes.txt
for the list of the used prefixes and add yours there. Try to use the prefix that is distinctive to other words in the text such that you can find and replace all without mistakes.Give names to all code chunks, even e.g., pure code and figures you don’t refer to. Note: Chunk labels must consist of only letters, numbers, dashes (
-
), and slashes (/
) – no underscores! Otherwise, cross-referencing won’t work properly.Paragraph breaks are simply indicated by one or more empty lines. No need for
\newline
or anything else. This applies to elements other than text such as figures, math blocks etc. If the figure/math block/etc is part of the paragraph, don’t leave blank spaces before or after1.Please use Capital Case for all section headings, for example, Plan the Study.
Our consensus for writing in a list is mentioned below. For details, visit here.
- Use
-
to denote lists. - If the items in the list are complete sentences, begin the first word in each item with a capital-case letter and end the item with period.
- If the items are single words and phrases, begin the first word in each item with a lower-case letter and end with a comma. Use “and” (or “or”, depending on the context of the list) after the next-to-last item, and use a period after the last item in the list.
- If the items are phrases or clauses with punctuations in them, put a semicolon at the end of each item. Put “and” (or “or”) after the next-to-last item in the list and period for the last item. The items are not capitalized.
- Use
For indentation, use four spaces before your paragraph, code chunk, or equation. This will be very helpful when you have an item in an itemized list which contains more than one paragraph, equation, or code chunk.
Name all code chunks according to the above guideline about cross-references. For code chunks that take long time to run, use
cache=TRUE
to prevent the chunk to be executed again unless the code in the chunk has been altered. More detail can be found here.Use the package styler to make the formatting of your code consistent. To do this, run the function
styler::style_file()
for your module’s Rmarkdown file. Do not set the optiontidy = "styler"
to your chunk code to prevent caching issues. The details of the package can be found here.Use “” instead of ’’ for quotes.
Use underscore
_
instead of dot.
to name variables.
B.2 Embedding Files
To embed a file in your module, first put it in any subdirectory of the data
folder of the repo. For example, the repo currently contains the file data/caliRain.csv
. You can then use the file anywhere in your module, e.g.,
## STATION PRECIP ALTITUDE LATITUDE DISTANCE SHADOW
## 1 Eureka 39.57 43 40.8 1 1
## 2 RedBluff 23.27 341 40.2 97 2
## 3 Thermal 18.20 4152 33.8 70 2
## 4 FortBragg 37.48 74 39.4 1 1
## 5 SodaSprings 49.26 6752 39.3 150 1
## 6 SanFrancisco 21.82 52 37.8 5 1
In order to let users download the file, you can simply provide the link using regular Markdown syntax. In other words, [download link](data/caliRain.csv)
will render as download link.
Note: This method works because somewhere in the project we make a call to knitr::include_graphics("data/arbitrary/file.ext")
, which has the effect of adding the data
folder to the bookdown output directory. In previous attempts we tried explicitly adding the data
folder to the output via dir.create()
. However, this requires that the output directory be supplied in advance, whereas in general it can be set on-the-fly via the output_dir
argument to bookdown::render_book()
.
B.3 Math
Always use bold font like \(\XX\)2 or \(\aal\) for anything that isn’t a scalar. In particular, please use
\bm{}
command in math mode to make things bold, and note that bold letters and symbols have standard macros as explained inindex.Rmd
. Please use them!If applicable distinguish between vectors and matrices (or collections of vectors) with lower and upper case, like \(\yy\) and \(\YY\) or \(\tth\) and \(\TTh\).
If the math equations are part of sentences, end them with suitable punctuation. If the formula is a derivation with multiple steps, only put punctuation at the final step.
If an equation is to be written in a new line, use two dollar signs to start and finish the equation. For example, consider observations \(\XX = (\rv X N)\) such that \[ \begin{aligned} X_i \mid \mu_i & \ind \N(\mu_i, \sigma_i^2) \\ \mu_i & \iid \N(0, \tau^2). \end{aligned} \tag{B.1} \]
Generally, a colon should not be used to set off an equation, even when it is a displayed equation. Typically an equation is the object in a sentence. Use a colon on occasion for emphasis, but make sure it fits grammatically. Examples can be found here. The same rules apply for code chunks.
Use \(j^{th}\) and \((i,j)^{th}\).
B.3.1 Commonly-Used Math and Stats Expressions
Sequences of random variables: \(X_1, \ldots, X_N\). In fact since these are so common, I’ve created a macro for it: \(\rv Y 5\) and \(\rv [m,0] Z {m,N_m}\).
For multi-line equations with alignment, use
aligned
environment as in (B.1).The “d” in integrals: \[ \ud X_t = \mu(X_t) \ud t + \ud B_t \qquad \iff \qquad X_t = \mu t + \int_0^t \mu(X_t) \ud t + B_t. \]
Conditioning: \(p(y \mid x)\).
Independence: \(Y \amalg X\).
Probability: \(\Pr(Y \le y)\).
Derivatives and partials: These are quite time-consuming to typeset so I’ve created some macros for them: \[ \der{x} f(x), \qquad \fdel[3]{x} {g(x, y)}, \qquad \hess{\tth}\ell(\tth \mid \XX). \] The last of these is used for Hessian matrices.
Independent/IID/Normal: Please see (B.1).
Variance/Covariance/Correlation: \(\var(X), \cov(X), \cor(X)\).
The \(p\)-value and the \(F\), \(t\) or chi-square tests.
An exception to this is possibly within an indented region. There you may need to leave a blank space before/after math block…I’m not 100% sure…↩︎
LaTeX purists might prefer to use
\mathbf{}
for roman letters instead of\boldsymbol{}
as I have defined via the\bm{}
macro inpreamble.html
. Observe the difference: \(\mathbf{x}\) vs \(\boldsymbol{x}\) and \(\mathbf{X}\) vs \(\boldsymbol{X}\). For pure LaTeX, the\bm{}
command in the bm package automatically picks the right one for you. Eventually, I’ll figure out how to use this package for the e-book, in which case if you consistently use\bm{}
for bold there will be very little for me to change!↩︎