#!/bin/env perl # Shebang is only to get syntax highlighting right across GitLab, GitHub and IDEs. # This file is not meant to be run, but read by `latexmk`. # ====================================================================================== # Perl `latexmk` configuration file # ====================================================================================== # ====================================================================================== # PDF Generation/Building/Compilation # ====================================================================================== @default_files=('simscape-nano-hexapod.tex'); # PDF-generating modes are: # 1: pdflatex, as specified by $pdflatex variable (still largely in use) # 2: postscript conversion, as specified by the $ps2pdf variable (useless) # 3: dvi conversion, as specified by the $dvipdf variable (useless) # 4: lualatex, as specified by the $lualatex variable (best) # 5: xelatex, as specified by the $xelatex variable (second best) $pdf_mode = 1; # Treat undefined references and citations as well as multiply defined references as # ERRORS instead of WARNINGS. # This is only checked in the *last* run, since naturally, there are undefined references # in initial runs. # This setting is potentially annoying when debugging/editing, but highly desirable # in the CI pipeline, where such a warning should result in a failed pipeline, since the # final document is incomplete/corrupted. # # However, I could not eradicate all warnings, so that `latexmk` currently fails with # this option enabled. # Specifically, `microtype` fails together with `fontawesome`/`fontawesome5`, see: # https://tex.stackexchange.com/a/547514/120853 # The fix in that answer did not help. # Setting `verbose=silent` to mute `microtype` warnings did not work. # Switching between `fontawesome` and `fontawesome5` did not help. $warnings_as_errors = 0; # Show used CPU time. Looks like: https://tex.stackexchange.com/a/312224/120853 $show_time = 1; # Default is 5; we seem to need more owed to the complexity of the document. # Actual documents probably don't need this many since they won't use all features, # plus won't be compiling from cold each time. $max_repeat=7; # --shell-escape option (execution of code outside of latex) is required for the #'svg' package. # It converts raw SVG files to the PDF+PDF_TEX combo using InkScape. # # SyncTeX allows to jump between source (code) and output (PDF) in IDEs with support # (many have it). A value of `1` is enabled (gzipped), `-1` is enabled but uncompressed, # `0` is off. # Testing in VSCode w/ LaTeX Workshop only worked for the compressed version. # Adjust this as needed. Of course, only relevant for local use, no effect on a remote # CI pipeline (except for slower compilation, probably). # # %O and %S will forward Options and the Source file, respectively, given to latexmk. # # `set_tex_cmds` applies to all *latex commands (latex, xelatex, lualatex, ...), so # no need to specify these each. This allows to simply change `$pdf_mode` to get a # different engine. Check if this works with `latexmk --commands`. set_tex_cmds("--shell-escape -interaction=nonstopmode --synctex=1 %O %S"); # Use default pdf viewer $pdf_previewer = 'zathura'; # option 2 is same as 1 (run biber when necessary), but also deletes the # regeneratable bbl-file in a clenaup (`latexmk -c`). Do not use if original # bib file is not available! $bibtex_use = 2; # default: 1 # Change default `biber` call, help catch errors faster/clearer. See # https://web.archive.org/web/20200526101657/https://www.semipol.de/2018/06/12/latex-best-practices.html#database-entries $biber = "biber --validate-datamodel %O %S"; # Glossaries add_cus_dep('glo', 'gls', 0, 'run_makeglossaries'); add_cus_dep('acn', 'acr', 0, 'run_makeglossaries'); sub run_makeglossaries { if ( $silent ) { system "makeglossaries -q -s '$_[0].ist' '$_[0]'"; } else { system "makeglossaries -s '$_[0].ist' '$_[0]'"; }; } # ====================================================================================== # Auxiliary Files # ====================================================================================== # Let latexmk know about generated files, so they can be used to detect if a # rerun is required, or be deleted in a cleanup. # loe: List of Examples (KOMAScript) # lol: List of Listings (`listings` and `minted` packages) # run.xml: biber runs # glg: glossaries log # glstex: generated from glossaries-extra push @generated_exts, 'loe', 'lol', 'run.xml', 'glstex', 'glo', 'gls', 'glg', 'acn', 'acr', 'alg'; # Also delete the *.glstex files from package glossaries-extra. Problem is, # that that package generates files of the form "basename-digit.glstex" if # multiple glossaries are present. Latexmk looks for "basename.glstex" and so # does not find those. For that purpose, use wildcard. # Also delete files generated by gnuplot/pgfplots contour plots # (.dat, .script, .table). $clean_ext = "%R-*.glstex %R_contourtmp*.*";