VLNA(1)
โจ VLNA(1) โจ
๐ NAME ๐
okay so meet vlna ๐ฆ, the tiny program that adds a tilde after each non-syllabic preposition. it's giving typography queen energy ๐
๐ USAGE ๐
vlna [options] [filenames]
๐ธ PREFACE ๐ธ
okay bestie, there's a special Czech and Slovak typography rule ๐จ๐ฟ you are NOT allowed to leave a non-syllabic preposition hanging at the end of a line and then keep writing on the next one ๐. so "v lese" (in a forest) can't be split like "v<new-line>lese". it's a whole no-no ๐ โโ๏ธ
that's where vlna slides in โจ. it adds an asciitilde between the preposition and the next word and removes the space(s) in that spot, so "v lese" becomes "v~lese". obsessed ๐ญ. you can even run it as a preprocessor before TeXing ๐ง. and if you don't love the tilde, you can store a different sequence instead with the -x option (see below) ๐
.
๐ DESCRIPTION ๐
so the program vlna processes one or more files ๐, hunts down the non-syllabic prepositions that are followed by space(s), and turns those space(s) into an asciitilde every single time โจ.
inside the file, you can pause the whole thing with the %~- sequence and bring it back with %~+ ๐. these sequences can have spaces in them too, so % ~- is a valid sequence as well, iykyk ๐.
here's how it decides something is a preposition ๐. you can write any number of opening parentheses before the preposition, and before those (optional) parentheses there has to be a space, a tabelator, or a new-line. the preposition itself is a one-letter word, and the letter has to come from this set: {KkSsVvZzOoUuAI}. if you want to change that set, check out the -v option ๐ฆ. starting from version 1.2, a TeX sequence can also sit in front of the preposition and before the brace ๐. for example, "<new-line>([V lese" becomes "<new-line>([V~lese" ๐. and "\uv{V lese}" becomes "\uv{V~lese}" ๐ซถ.
at least one blank-space has to come after the preposition before the next word ๐. a blank-space is a space or a tabelator, and one <new-line> can sneak in there too ๐. all of those characters get removed and replaced with asciitilde (or whatever string you picked with -x) โจ. if a <new-line> gets deleted, a fresh <new-line> is created before the preposition (and before the optional parentheses) so the number of lines stays exactly the same ๐. for example, "... V<new-line><tabelator>lese" becomes "...<new-line>V~lese" ๐ท.
the program also checks that TeX's math environments are consistent (unless you use -m) ๐งฎ. for example, the "$...$$...$" sequence, which means switching into display mode inside text-math mode, throws a warning ๐ญ. an empty line inside display mode also throws a warning, and then the program handles the next text like normal non-math mode ๐. a "$" inside display mode is totally accepted though, because stuff like $$..\hbox{..$..$}..$$ is allowed and super common ๐.
verbatim mode gets checked too ๐. if the file ends while verbatim mode is still open, you get a warning ๐จ. you can switch this off with -n or -w ๐
โโ๏ธ.
and the program won't touch letters that look like prepositions but aren't, when a TeX or LaTeX sequence comes right before them ๐
. for example, "vlastnosti \TeX u jsou" is NOT converted to "vlastnosti \TeX u~jsou", because after TeX processing it prints as "vlastnosti TeXu jsou". the "u" is a suffix there, not a preposition ๐ธ.
๐ OPTIONS ๐
the options are, like, totally optional ๐ซถ, and you can write them in any order you want, separated by spaces โจ.
-fโ filter mode ๐ง. the[filenames]get treated like this:
vlna -f filename1 filename2
Input is filename1, output is filename2.
vlna -f filename1
Input is filename1, output is stdout.
vlna -f
Input is stdin, output is stdout.
vlna filename1 [filename2 [filename3 ...]]
If the -f option is omitted then each file is processed
independently and it is re-written.
-sโ silent mode ๐คซ. no messages, warnings, or statistics get printed. only the errors that crash the program early still show up ๐. if you leave this out, the banner, warnings, and statistics all go to stderr ๐ฃ.-rโ no backups ๐ โโ๏ธ. this one doesn't matter if you're using-f. if you use neither-fnor-r, each rewritten file gets its original contents saved to a backup file. the backup name is the same as the filename, except the last character is swapped for a tilde ๐.-v charactersโ choose your own preposition letters ๐ค. the set of characters that count as non-syllabic prepositions is set here. default:-v KkSsVvZzOoUuAI. there has to be a space between-vand the characters ๐.-x codeโ swap out the tilde ๐. the code is a hexadecimal string, and you need every hex digit, no skipping ๐. this string gets saved after prepositions instead of the defaultasciitilde. for example,-x C2A0stores two bytes after each non-syllabic preposition: the first isC2and the second isA0, which means a NO-BREAK SPACE in UTF8 encoding โจ. another one:-x 00A0gives you the NO-BREAK SPACE in UTF16 ๐ง. and-x 48454C4C4Fgives you the string HELLO ๐. you need a space between-xand the code ๐ซถ.-mโ ignore math modes ๐งฎ.$...$and$$...$$get ignored, so prepositions get searched for in math mode too. default (without-m): math modes are left alone, because (for example) "v" is a variable in math mode, not a preposition ๐ โโ๏ธ.-nโ ignore verbatim mode ๐งพ.\verb<char>...<char>and\begtt...\endttare ignored, so the program can change stuff inside verbatim environments. default (without-n): verbatim mode is left alone ๐ .-lโ LaTeX mode ๐.\begin{display}...\end{display}and\begin{equation}...\end{equation}count as display mode, and\begin{verbatim}...\end{verbatim}counts as verbatim mode ๐ธ.-wโ web mode ๐ธ๏ธ (Knuth's web, no www:-). these sequences count as verbatim:@<,@d...@*,@space, or@>|. so program code stays untouched in*.wor*.webfiles, and only the web comments get processed ๐.
๐ง EXAMPLES ๐ง
vlna -m -n -s -r file
this behaves similarly to the old vlnka program ๐ตโจ.
vlna *.tex
every file with the .tex suffix in the current directory gets processed, and might get changed ๐. (the "*" is a UNIX-shell feature, periodt ๐).
vlna -f file > /dev/null
only the consistency checking of math and verbatim modes happens here. no changes are made ๐.
๐ AUTHORS ๐
Petr Olsak <olsak@math.feld.cvut.cz>. the Man page (Czech original) and Makefile were created by Rulolf Cejka ๐ซถ.
bestie, that's the whole thing ๐ โจ this man page was dated August 30 2022 ๐ท, and it's the VLNA(1) page, the General Commands Manual ๐. go be a main character with your prepositions ๐๐ฆ
๐ฆ where this page comes from
- alpine 3.24: texlive-doc 2026.0-r0 ยท GPL-2.0-or-later AND GPL-3.0-or-later
- arch rolling: texlive-doc 2026.1-1 ยท GPL
- debian trixie: texlive-binaries 2024.20240313.70630+ds-6 ยท TeX-Live
- fedora 43: texlive-vlna 11:svn66186-93.fc43 ยท LPPL-1.3c
- fedora 43: texlive-vlna 11:svn66186-95.fc43.1 ยท LPPL-1.3c
- fedora 44: texlive-vlna 12:svn73908-105.fc44 ยท LPPL-1.3c
- fedora 44: texlive-vlna 12:svn73908-111.fc44 ยท LPPL-1.3c
- opensuse-leap 16.0: texlive-vlna 2025.221.svn73908-160000.3.1 ยท LPPL-1.0
- ubuntu noble: texlive-binaries 2023.20230311.66589-9build3 ยท TeX-Live
- ubuntu questing: texlive-binaries 2024.20240313.70630+ds-6ubuntu2 ยท TeX-Live
- ubuntu resolute: texlive-binaries 2025.20250727.75242+ds-5build1 ยท TeX-Live
- ubuntu stonking: texlive-binaries 2026.20260303.78225+ds-5ubuntu1 ยท TeX-Live
- ๐ girlified by anthropic/claude-haiku-5.5 on : a language model's rewrite of the original, under its terms