LPT Do it. - Mander

Git is like shit for Word documents
But better for LaTeX
and then there are fucking PIs insisting on word files who never heard of tracked charges let alone of file naming conventions.
I dunno what a PI is, but my honours thesis supervisor was the person who first introduced me to TeX. And gods, I wish I had known about it earlier in uni, or even back in high school. It is so useful when writing any sort of papers with sections and diagrams and bibliography.
Principal Investigator. It’s the lead scientist in charge of the project.
Aka, old fucks who don’t even know how to save a PDF. Also the only reason I can’t work with modern tools, including sending a OneDrive link for a manuscript in Word. We get to pass around a million copies of the same Word file like animals.
Check out Typst (a newer TeX-like layout engine) if you have time, I’m interested in your opinion. I find it a bit simpler to use than TeX.
Un(?)fortunately I don’t have much cause these days for either TeX or some equivalent to it. Anything I’m writing today is simple enough that it doesn’t need anything more sophisticated than markdown for formatting.
Then start writing in Markdown. Markdown is easier in syntax, supports LaTeX equations, has metadata and is in plain text so you can use git. And the killer feature is you can use pandoc to convert the markdown file into word, pptx, LaTeX pdfs, html etc. you can also setup a make file that runs pandoc when you ask like this
Makefile that uses Pandoc to generate HTML, PDF, DOCX, etc. from Markdown source files

Makefile that uses Pandoc to generate HTML, PDF, DOCX, etc. from Markdown source files - Makefile

Gist
yeah this is what i used for some projects, i.e. rmarkdown which also integrates the statistics part

Unzip the docx with a pre-commit hook

(This is not a serious suggestion)

Just like word documents are shit for papers and theses/dissertations it turns out. The formatting alone is a nightmare.
Still better than using file names.

.gitattributes can invoke Word on windows to diff versions, and there are plenty of open source scripts that can do it if you don’t have a copy of Word (or Windows) lying around.

But Word is like shit for papers. Use LaTeX instead.

Git - gitattributes Documentation

Why on Earth would you curse yourself with MS Office anyway, especially if writing docs is your professional responsibility?

Why not use Git+Markdown+Pandoc, have your copy, data and layout separate?

I understand that a lot of istitutions/companies impose stylistic/technical requirements for docs and publications, - still doesn’t matter you gotta stay married to the worst tooling.

This is the way.

Why on Earth would you curse yourself with MS Office anyway

idk it says .docx in OP’s image

Oh sorry, I was too focused on calling out the silliness of the idea.
That’s why we wrote our thesis in LaTeX: github.com/jonte/GGS-report/blob/…/report.lyx#L36…
GGS-report/report.lyx at a9d9d20bcc22a524629e371ce5984f131490b743 · jonte/GGS-report

Contribute to jonte/GGS-report development by creating an account on GitHub.

GitHub
I also have my reports in latex inside a git repo, complete with a makefile to generate graphs from csv containing simulation results. However I am too ashamed to publish the entire version control to a public repo

#LyX 2.0 created this file. For more info see www.lyx.org

Wait, I thought you guys did it manually…

Anyway, I should still learn it.

LyX | LyX – The Document Processor

It’s a editor helping you writing it, you cat still go inside and change things manually if you need/want to do that.
Between zfs and git, all my important data is versioned.

BTRFS for all us lame folks.

PS Windows pervious versions is actually pretty good, but no one uses it on desktop.

The weird part is that most modern office software has version control built right in.

And I still do this with all my files anyway.

I’ve had the built in version control do unexpected things, so I play it safe and create named backup files. I usually end up using that one file, but I’ve been saved on occasion

Use date/time in your file name,using GMT:

Metrics of Sales 2024-05-22_14-29.docx

Very unlikely to have 2 docs with the same down-to-the-minute time stamp in the name.

If you think this process involves enough mindpower to check the time, let alone figure out where the dashes are in whatever language keyboard setup I'm using at the time, you are wildly overestimating how much care goes into doing this.
Eh. I think he reffers to auto naming on save with date, not manually

I have an AutoHotkey script that drops the current date in ISO8601. I don’t need timestamps often, so date is sufficient. I like to have manual control of file names since I very frequently do not want files renamed.

Cute related story: I taught my 6 y.o. son this macro so he can save his Krita art with the date (and then some keyboard spam ending in “poop”, usually). The macro shortcut I set is `T so he now calls the date “ticky tee”. Any set of numbers with dashes is a “ticky tee” to him, and if AutoHotkey is closed he runs to get me because “ticky tee isn’t working, Daddy!”

Dammit, why have I never thought to use AHK for this? I already use the custom context menu script someone developed about 15 years ago (Favorite Folders? It’s on the AHK/AutoIT forum) , I can just add it to that.

AHK/AutoIT are game changers. I feel naked on a machine without it, I’m so used to Ctrl-Middle -click to get to all sorts of things… Folders, scripts, tools, automations (like your date idea), etc.

Well, if you can’t be bothered to ensure file names mean something, then you get to enjoy the results.

In the Real World®, sometimes files get shared and traded around, and conversations happen about them, and you need to be able to quickly verify you’re looking at the same doc.

We can’t all be connected to the same version control system.

Well, if you can't be bothered to ensure file names mean something, then you get to enjoy the results.

Now you're getting it.

I generally do this on my NAS, combined with nightly and bi-weekly backups, plus a 6-mo safety backup, to a backup drive. Also, basic off-site nightly backups for important stuff. If I worked on really important stuff that required lots of versioning, though, I’d probably go with a versioning system instead of inserting the date.

Who handles the live replication and offsite storage rotations for your quantum encrypted multi site redundant back up system?

I kid (because your excellent practices put mine to absolute shame). Thanks for the reminder to get serious about backups!

Its just not trustworthy

I encountered an engineering firm that did this. I wanted to do it too.

The company I worked for at the time (said engineering firm was doing subcontracting for us) was full of older business people who could never in a million years have wrapped their heads around the idea.

I also met this at a contracting job. Drove me bonkers.
This is how you know they’re irrelevant. Take the time to learn or just retire.
Don’t put binary files in git
It’s not ideal, but for a thesis — which ideally has an end date after which it won’t be used — it’s not a huge problem I’d argue.
both Microsoft office and open/libre office files are zip files containing mostly XML so its not that bad actually , as long as you expose the files inside to git
Don't use version control that can't handle binary files.
What’s the issue with binaries in git? Just that diff’ing binary files is useless?

They are generally large, uncompressable and replaced instead of updated like text files. All files stay in the repo history forever, they make repos big and slow compared to text files with no advantages provided.

If a binary file needs to be stored in git, it’s usually more appropriate to use git LFS for that file. Git LFS stores the binary outside of the repo in the same way that database engines store binary outside of the respective table.

I also added a Makefile for mine (LaTeX), and it would add the commit hash to the front page (with an asterisk if the repository had uncommitted changes).

So, if I gave a draft to someone and got feedback, I’d know exactly which revision it was.

Hey, amazing idea, can you share the code?

Sure thing. This also includes the beamer bit which I used for my defense. It’s all pretty hacky but hope it’s useful!

# # Errors aren't handled gracefully (tex doesn't write to stderr, it seems) # If you encounter errors, use "make verbose" # # For small changes (probably those without references), use "make quick" # # Thanks to https://gist.github.com/Miliox/4035649 for dependency outline TEX = pdflatex BTEX = biber MAKE = make -s TEXFLAGS = -halt-on-error # $(MAIN).log is dumb if we have multiple targets! SILENT = > /dev/null || cat $(MAIN).log SILENT_NOER = 2>/dev/null 1>/dev/null EDITOR = vim -p PDFVIEW = evince MAIN = main PRES = presentation ALL = $(MAIN).pdf RECURS = media/ manuscripts/ VERSION := $(shell git rev-parse --short HEAD | cut -c 1-4)$(shell git diff-index --quiet HEAD && (echo -n ' ';git log -1 --format=[%cd]) || (echo -n '* '; date -u '+[%c]')) all: recurs $(ALL) pres: $(PRES).pdf scratch: scratch.pdf scratch.pdf: scratch.tex @echo "TEX (final) $<" @$(TEX) $(TEXFLAGS) $< $(SILENT) verbose: SILENT = '' verbose: $(ALL) recurs: $(RECURS) @$(foreach DIR, $(RECURS), \ echo "MAKE (CD) $(CURDIR)/$(DIR)"; \ $(MAKE) -C $(DIR) $(MAKECMDGOALS);) @echo "MAKE (CD) ./" clean: @echo "SH (RM) Not recursing; 'make allclean' to clear generated files." @rm -f *.aux *.log *.out *.pdf *.bbl *.blg *.toc *.lof *.lot *.bcf *.run.xml allclean: recurs @echo "SH (RM) A clean directory is a happy directory" @rm -f *.aux *.log *.out *.pdf *.bbl *.blg *.toc *.lof *.lot *.bcf *.run.xml version: @echo "SH (ver) $(VERSION)" @echo $(VERSION) > VERSION.tex nixpages: main.pdf @echo "PDF (pdftk)" @pdftk main.pdf cat 1 4-end output final.pdf quick: $(MAIN).tex version @echo "TEX (final) $<" @$(TEX) $(TEXFLAGS) $< $(SILENT) $(MAIN).pdf: $(MAIN).tex $(MAIN).bbl all.tex tex/abstract.tex tex/intro.tex tex/appendix.tex tex/some_section.tex tex/some_other_section.tex @echo "TEX (draft) $<" @$(TEX) $(TEXFLAGS) --draftmode $< $(SILENT) @echo "TEX (final) $<" @$(TEX) $(TEXFLAGS) $< $(SILENT) $(MAIN).bbl: $(MAIN).aux @echo "BIB (bib) $(MAIN)" @$(BTEX) $(MAIN) > /dev/null $(MAIN).aux: $(MAIN).tex $(MAIN).bib version @echo "TEX (draft) $<" @$(TEX) $(TEXFLAGS) --draftmode $< $(SILENT) $(PRES).pdf: $(PRES).tex $(PRES).bbl tex/beamer*.tex tex/slides/*.tex @echo "TEX (draft) $<" @$(TEX) $(TEXFLAGS) --draftmode $< $(SILENT) @echo "TEX (final) $<" @$(TEX) $(TEXFLAGS) $< $(SILENT) $(PRES).bbl: $(PRES).aux @echo "BIB (bib) $(PRES)" @$(BTEX) $(PRES) > /dev/null $(PRES).aux: $(PRES).tex $(MAIN).bib @echo "TEX (draft) $<" @$(TEX) $(TEXFLAGS) --draftmode $< $(SILENT) edit: @echo "EDIT (fork) $(EDITOR)" @$(EDITOR) ./tex/*.tex *.tex view: @echo "VIEW (fork) $(PDFVIEW)" @$(PDFVIEW) $(ALL) $(SILENT_NOER) &

I also had some Makefiles in other directories, e.g., for my media/ I had:

MAKE = make -s RECURS = svgs/ recurs: $(RECURS) @$(foreach DIR, $(RECURS), \ echo "MAKE (CD) $(CURDIR)/$(DIR)"; \ $(MAKE) -C $(DIR) $(MAKECMDGOALS);) @echo "MAKE (CD) $(CURDIR)/" all: recurs clean: allclean: recurs clean

and for media/svgs/:

SVG_FILES := $(wildcard *.svg) PDFDIR := ./ PDF_FILES := $(patsubst %.svg,$(PDFDIR)/%.pdf,$(SVG_FILES)) all: $(PDF_FILES) clean: @rm -f $(PDF_FILES) @echo "SH (RM) Tidying up derived PDFs" allclean: clean $(PDFDIR)/%.pdf: %.svg @inkscape -T --export-pdf=$@ $< @echo "INK (PDF) $<"
Thank you!!! I’ll see if I manage to make it work for me.

Makefile in other comments. You’ll need something like this on the title page (this assumes you use my Makefile which puts the version in VERSION.tex [that’s the literal name of the file, not a placeholder]):

{\bf{\color{red}DOCUMENT REVISION:}} {\color{blue}\input{VERSION}}

“Click I want to delete this repository” ate my homework.
I wrote about half of my thesis in R Markdown using Git to backup my work. It’s fantastic because you can have your plots and statistics integrated directly into your paper and formatting in Markdown is much easier than straight up latex.
R markdown is awesome. I’d always use it for my biostatistics tests and assignments.
Me with Jupyter Notebooks

Had to write a paper in college with 100 citations.

We used zotero for citation management, and it would dump a bibtex file on demand.

The paper was written in markdown, stored in git, and rendered through pandoc. We would cite a paper with parentheses and something resembling an id, like (lewis).

We gave pandoc a “citation style definition”, and it took care of everything. Every citation was perfectly formatted. The bibliography was perfectly formatted. Inline references were perfect. Numbering was perfect. All the metadata was ripped from pdfs automatically. It was downright magical.