Miskatonic University Press

LaTeX template for continuing appointment and tenure files

code4lib latex york

Librarians and archivists at York University Libraries are members of the York University Faculty Association, the union for full-time academic employees. Last year YUFA agreed to a new collective agreement. (The old agreement expired on 30 April 2021, and bargaining went very slowly for months, then suddenly very quickly after a strong strike vote. In March 2022 we ratified the 2021–2024 agreement, which was backdated to 1 May 2021. Now in 2023 we’re planning for the next round in 2024, which isn’t going to be smooth.)

The new agreement has major revisions to Criteria and Procedures for Promotion and Continuing Appointments for Professional Librarians and Archivists (see the last part of that document). The old language had not changed significantly since 1978 and was far out of date, no longer reflecting the work librarians and archivists do. The new language has many improvements to both the criteria and the process.

Part of the new way of doing things is that a three-person file preparation committee works with the candidate to build the promotion file (a large document showing how the candidate meets or exceeds the criteria). Before, the candidate built it themselves. The new arrangement parallels the faculty process and is meant to make stronger files while reducing work and stress for candidates.

The technical work of building the file—assembling dozens of PDFs and PowerPoint slide decks into one PDF, with a proper table of contents and pagination—is nontrivial. I’m told some people do it with Adobe Acrobat Pro or PDF-XChange Editor, but that looked painfully finicky to me and involved proprietary software. Last year I was on a file prep committee and I volunteered to do it in LaTeX. That worked very well.

I turned what I did into a generic template and put it on GitHub: yufile. Here’s the sample table of contents.

Example of table of contents
Example of table of contents

The PDF has a good navigable structure:

The PDF has a proper structure
The PDF has a proper structure

This requires some knowledge of LaTeX, which is also nontrivial (he said litotically). But when all the pieces are in place, rebuilding the file with new constituent documents is just a matter of replacing the old PDFs with the new ones and running one command (twice). Last minute change and two PDFs need updating, and they’re both different lengths than they were before? No problem. Copy file, copy file, run pdflatex twice, and it’s done. From what I hear, doing that with those proprietary programs would involve all kinds of clicking and editing and frustration. And perhaps learning some LaTeX by fiddling with a template and having some good luck will lead to using it more. If you’re interested in page design, typesetting and making beautiful documents, LaTeX is worth a look.

I hope this is useful to anyone doing file preparation at York or elsewhere.

Exporting Org source code blocks to LaTeX with minted

code4lib emacs latex

Recently I spent much longer than expected generating data about library holdings for an insurance spreadsheet needed by CURIE. We don’t have to do it often, and this was the first time I’d had to figure out the numbers they want about total books on the shelf (by LCC class letter) and years of print journal holdings (by subject groupings based on LCC). Cleaning the messy bibliographic metadata—all bibliographic metadata is messy—took a number of steps, and naturally I did it with R in Org, documenting everything in a reproducible way so that next time it will just take me an afternoon, not days and days.

Interesting fact: the Scott Library has about 250,000 years of print journals on the shelves.

So that others can see what data cleaning and munging was done, I exported the Org file to LaTeX and then turned it into a PDF. I included the R source code and wanted to make that look nice, not just plain verbatim text. This got me looking at the LaTeX package minted for the first time. Here I document how I now have things set up.

In my Emacs config I set up a function to turn minted on or off. Originally I added minted to the default list of packages in every LaTeX export and defined that every source code listing should be formatted with minted, like so:

(add-to-list 'org-latex-packages-alist '("" "minted" nil))
(setq org-latex-src-block-backend 'minted)

About the first line, a lot of documentation says the variable to set is org-latex-listings but as of Org 9.6 that is obsolete. As to the second, with that back end variable set, every block will be inside \begin{minted} and \end{minted} instead of \begin{verbatim} and \end{verbatim}.

But when minted is one of the included packages it’s always necessary to run pdflatex -shell-escape to compile the PDF, even if there are no source blocks. I can’t be having that.

Instead, I use this function (based on a tip from Xah Lee) to toggle those settings on or off. When I’m working on a file that I want to export using minted, I run M-x wtd/org-toggle-minted to turn things on. When I’m done, I run it again to turn things off.

(defun wtd/org-toggle-minted ()
  "Toggle whether or not Org should use minted for LaTeX."
  (if (get 'wtd-org-minted-on-or-off 'state)
	(setq org-latex-packages-alist (delete '("" "minted" nil) org-latex-packages-alist))
	(setq org-latex-src-block-backend 'verbatim)
	(put 'wtd-org-minted-on-or-off 'state nil)
	(message "Minted is off")
      (add-to-list 'org-latex-packages-alist '("" "minted" nil))
      (setq org-latex-src-block-backend 'minted)
      (put 'wtd-org-minted-on-or-off 'state t)
      (message "Minted is on; use pdflatex -shell-escape -interaction=nonstopmode")

(My arrangement of parentheses probably offends many people, but I don’t do much Lisp and I find it helpful here.)

Now, minted has all sorts of options. They can be set in an association list that will be passed to every source block, like so.

(setq org-latex-minted-options
      '(("frame" "leftline")

However, this seems inelegant to me. It puts the same text on every code block, over and over, and I would rather specify the options once in LaTeX. Also, I don’t think I’ll want the same look on everything I do; I want to be able to control document-specific options right in the Org file. Therefore I prefer to define options with \setminted{} in a latex_header at the top of the Org file.

Here’s an example. The file starts with minted settings (I don’t need usepackage because it’s already done, thanks to the above). This says that I want to use one of the Solarized colour schemes (see the listing of Pygments styles) and put a line on the left of every block. For R code, I want line numbers.

#+latex_header: \setminted{style=solarized-light,frame=leftline}
#+latex_header: \setminted[r]{linenos=true}

Here’s an R block. I throw in an option for this block specifically, to change the frame setting so there’s a line around the whole block.

#+attr_latex: :options frame=single
#+begin_src R
fruits <- c("apple", "pear", "grape", "blueberry")
map(fruits, \(f) nchar(f))

(I know that nchar(fruits) is the proper way, but I was using purrr seriously for the first time in the CURIE work and thought what the hell.)

In my Emacs (where I use the dark Solarized theme), this looks like so:

Formatted R code in Org
Formatted R code in Org

When turned into a PDF, I get:

Nicely formatted code from the PDF
Nicely formatted code from the PDF

That looks good!

It’s in a box because I overrode the frame setting, it has line numbers because I set that for R, and it uses the Solarized light theme because that is the document setting.

Next, here’s a Ruby block.

#+attr_latex: :options style=default,fontsize=\footnotesize
#+begin_src ruby
fruits = %w[apple pear grape blueberry]
fruits.each do |f|
  puts f.length

In my Emacs:

Formatted Ruby code in Org
Formatted Ruby code in Org

In the PDF:

Nicely formatted code from the PDF
Nicely formatted code from the PDF

That also looks good!

It has the left line by the document setting, but the style is overridden in just this block to be the Pygments default, and for fun the font size is a bit smaller.

To make all this work I need Pygments installed, because that’s how minted does the formatting. That’s a simple external requirement (well, as simple as Python packages are; I use them so rarely I always get confused by whether I should use pip or pip3 and if it needs to be run as root, but the error messages are helpful and I get it right soon enough). But because it’s external, pdflatex needs to be run specially to allow an outside call:

pdflatex -shell-escape filename.tex

Or better yet this, to plough through problems:

pdflatex -shell-escape -interaction=nonstopmode filename.tex

I could configure Org to handle that but I’d rather do it by hand when needed and I know it’s safe.

Lastly, to show off the LaTeX fragment previews in Org, here’s some math almost plain (some of the raw LaTeX is prettified in the buffer) and then previewed. This is Org showing me in Emacs what the PDF output will look like.

Formula for pi in mostly raw LaTeX
Formula for pi in mostly raw LaTeX
Formula for pi looking spiffy
Formula for pi looking spiffy

I’m happy to have found one more way for Org and LaTeX to work together to make more beautiful documents.

UPDATE (22 November 2023): I rewrote this to use the toggle function instead of accidentally leaving the minted settings permanently on.

Making nmap work after installing with snap


Noting for myself how to fix it when nmap complains it can’t open the network interface. This is yet another Ubuntu snap annoyance, but at least one command makes it go away.

$ sudo nmap -sS 192.168.0.*
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-21 21:53 EST
dnet: Failed to open device wlp0s20f1
$ sudo snap connect nmap:network-control
Connect nmap:network-control to snapd:network-control
$ sudo nmap -sS 192.168.0.*
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-21 21:53 EST
Nmap scan report for _gateway (
Host is up (0.0032s latency).
Not shown: 996 closed tcp ports (reset)
53/tcp   open  domain
80/tcp   open  http
443/tcp  open  https
1900/tcp open  upnp

York centralizes control over social media presences


I was at an internal workshop at York University Libraries this morning about writing headlines and titles. Apparently the sweet spot is 51–70 characters with seven words. See this post’s title as a demonstration of what I learned.

Robert Gehl, a prof at York, writes the FOSS Academic blog. In How universities lost the internet, he said:

Fast forward to today. Now, I am happily employed by York University in Toronto. But just the other day, my colleagues met for a faculty meeting, and we discussed recruiting students. Someone suggested we post information about our faculty to our department website and social media. “No,” the chair said. “All of that would have to go through the central administration” – the implication being either it wouldn’t be allowed, or that it would take months to achieve.

(His later points about universities outsourcing important IT are dead on. It’s dreadful in libraries. Almost every university library in Ontario runs Alma as their library management system with Primo as the front end—we rent them from Clarivate, a massive data broker.)

Back in 2008 (IIRC) I created @yorkulibraries on Twitter and ran it for a while before handing it over to someone in the dean’s office. No one ever questioned me creating it (though it certainly helped that I was web librarian at the time).

I asked today if the Libraries was on Mastodon. I was told the central brand department is looking into expanding into new socials, for example Threads, and Mastodon could be one of them. Nothing can be done until they decide. Later I looked at the Social Media and Digital Requirements.

Digital properties offer an excellent way to engage with our community and beyond in real-time and we hope that the updated Policy, Procedures and these guidelines and requirements will serve to help prepare you and support your work while ensuring brand alignment and compliance. Failure to comply may result in the University taking steps to have an account closed or temporarily shut down until the user is in full compliance with the Requirements.

York’s motto is Tentanda via: The way must be tried.



I’ve started using fd to find files (at the command line), instead of the built-in find. It’s much easier to use and just makes more sense, and it’s fast.

Here’s the old way of changing permissions on a bunch of music files I just bought on Bandcamp. This says “find every file, in this directory and any subdirectories, with a name ending in .flac, and run chmod 644 on it.” I specify that I just want to work on files because I don’t want to change the perms on a directory of Roberta Flack albums by accident.

find . -name "*.flac" -type f -exec chmod 644 {} \;

New way:

fd .flac -t f -x chmod 644

(I could add a dollar sign and have .flac$, meaning “end of string” or “end of line” in regular expressions, but I don’t need it. I would use --exec instead of -x and --type instead of -t in a script, but not if I’m typing a one-off.)

I have this in my ~/.fdignore file, because otherwise the Zotero folder always turns up matches I don’t want:


This list of modern Unix command replacements is worth checking out. I use ag and btop instead of grep and top, but still stick with the built-in less and ls.



From Fancy Bear Goes Phishing: The Dark History of the Information Age, in Five Extraordinary Hacks by Scott J. Shapiro (2023), in the chapter about Cameron LaCroix’s hack of Paris Hilton’s phone:

Like great-grandfather Conrad Hilton, who was routinely photographed with showgirls on his arm and was married to Zsa Zsa Gabor, and grandfather Nicky, who was married to and quickly divorced Elizabeth Taylor, Paris was rumored to be in a secret relationship with actor Leonardo DiCaprio.

The Deluge

climate.change literature reviews

I don’t know why more people aren’t talking about The Deluge by Stephen Markley.

Cover of The Deluge
Cover of The Deluge

It’s the best new novel I’ve read this year. It’s a huge, sprawling book, 880 pages long, with multiple narratives following a handful of major characters and a large cast of others, from 2013 to 2040. It’s about climate change in America. It starts with how things are, and as it moves into the near future, things get worse, and worse, and worse, as they inevitably will.

There are some small moments and there are huge set pieces. There is poetic writing and there are lengthy detailed policy documents. It has disasters. It has fascism. It has some hope. It is a vast novel and it contains multitudes. (Markley draws on techniques John Dos Passos used in the USA trilogy, as does Kim Stanley Robinson’s The Ministry for the Future, to which it is comparable, but this is a much better novel.)

Related recommended nonfiction: The Uninhabitable Earth: Life After Warming (2019) by David Wallace-Wells and Our Final Warning: Six Degrees of Climate Emergency (2020) by Mark Lynas. These are the two best science books I’ve read on the climate crisis. The Deluge is the best novel. (The best novel dealing with it head on as the main subject, that is. William Gibson’s The Peripheral (2014) is about climate change, but a lot of other things as well.)

418 ppm CO₂
418 ppm CO₂

Elisabeth Russell Taylor

literature wikipedia

A few days ago a friend mentioned she’d picked up a book by Elisabeth Russell Taylor, based on her introduction to a book by Elizabeth Taylor (not that Elizabeth Taylor). (I’ve been reading some Elizabeth Taylor recently myself, and would recommend Angel (1957) and Mrs. Palfrey at the Claremont (1971).)

Cover of In a Summer Season
Cover of In a Summer Season

I had a vague memory of seeing a book by Elisabeth Russell Taylor once, and was curious to know more about her. I did what I always do: I looked her up on Wikipedia.

She had no Wikipedia entry. So I created one: Elisabeth Russell Taylor. I spent about an hour on it late one night, pasting in a partial bibliography, setting up the infobox, putting in a reference to her Guardian obit but not citing it, and adding some categories and the authority control template. (It looked like this when I was done.)

I woke up the next morning to several notifications from Wikipedia. Someone had unpublished the page and made it a draft, saying it wasn’t ready for publication! Someone else undid that and made it live again! I thanked him. That night I made some edits, added some citations, and it’s a decent stub now. The difficulty in getting it started was much less than I’d feared: see the article creation and deletion section of Wikipedia’s entry on gender bias on Wikipedia for more.

Here’s an odd thing: there used to be a page about Elisabeth Russell Taylor, but it was deleted when everything created by a sock puppet account was wiped. The history log for the page shows that it was created and reviewed in January 2021 and then deleted in November. I can’t figure out how to get to the previous version, but there’s this strange archived version on another site. It was a decent entry! I don’t know about the account that made it, but this particular entry was a solid beginning and was an unfortunate side effect of the mass deletion. I referred to it when making my own updates.

Soon I’ll read one of her novels.

Anthony Powell on getting older

anthony.powell quotes

Further to my last post, Dickie Umfraville says this in Temporary Kings (1973) by Anthony Powell:

You know growing old’s like being increasingly penalized for a crime you haven’t committed.

Strangely this quote is also widely misattributed to Pierre Teilhard de Chardin.

Mick Herron on getting older

mick.herron quotes

From The Secret Hours (2023) by Mick Herron:

Nobody told you what a drag it was, getting older. Or at least, people did tell you, but you ignored them, because they were old.

List of all blog posts