DVIPS(1)

๐Ÿ“ฆ version 2026.0, in alpine 3.24

๐Ÿ’– DVIPS(1) ๐Ÿ’–

General Commands Manual โœจ bestie, this is the dvips page, and it's a whole vibe ๐ŸŒธ

โœจ NAME โœจ

dvips โ€” convert a TeX DVI file to PostScript ๐Ÿฆ‹

๐ŸŽ€ SYNOPSIS ๐ŸŽ€

dvips [OPTIONS] file[.dvi]

๐ŸŒˆ DESCRIPTION ๐ŸŒˆ

๐Ÿšจ THIS MAN PAGE IS OBSOLETE! ๐Ÿšจ okay so the page itself is outdated, so go read the Texinfo docs instead ๐Ÿ“š You can read them in Emacs or with the standalone info program ๐Ÿงš

okay so dvips takes a DVI file, file[.dvi], that TeX made (or some other processor like GFtoDVI ๐Ÿ’…) and converts it into PostScript ๐Ÿ’– The output can go to a file or get sent straight to a printer โœจ You don't have to type the .dvi extension, it's optional ๐ŸŒธ The fonts it uses can either live inside the printer already, or be bitmaps stored in PK files, or be a virtual mix of both, which is so iconic ๐Ÿ‘‘

Also, if the mktexpk program is installed, dvips will automatically call on METAFONT to make any fonts that don't exist yet ๐Ÿ”ฅ literally so helpful ๐Ÿ˜ญ

For more info, check out the Texinfo manual dvips.texi. It should be installed somewhere on your system, hopefully reachable through the standard Info tree ๐Ÿฆ‹

๐Ÿ’… OPTIONS ๐Ÿ’…

  • -a โ€” ๐Ÿง  Conserves memory by doing three passes over the .dvi file instead of two, and only loads the characters that actually get used ๐Ÿซถ This is mostly for machines with very little memory, like some PCs ๐Ÿ’€
  • -A โ€” ๐ŸŒ™ Prints only the odd pages (TeX pages, not sequence pages) โœจ
  • -b num โ€” ๐Ÿ‘ฏ Generates num copies of each page by duplicating the page body, instead of using the #numcopies option ๐ŸŽ€ This can be super useful together with a header file that sets \bop-hook for color separations or other neat tricks ๐ŸŒˆ
  • -B โ€” ๐ŸŒค๏ธ Prints only the even pages (TeX pages, not sequence pages) ๐Ÿ“
  • -c num โ€” ๐Ÿ–จ๏ธ Generates num copies of every page ๐Ÿ’– The default is 1 ๐ŸŒธ (For collated copies, check out -C down below ๐Ÿซถ)
  • -C num โ€” ๐Ÿ“š Creates num copies, but collated, by replicating the data in the PostScript file ๐Ÿงš It's slower than -c, but way easier on the hands, and faster than resubmitting the same PostScript file over and over ๐Ÿ™ˆ
  • -d num โ€” ๐Ÿ•ต๏ธ Sets the debug flags ๐Ÿ” This is only for emergencies or for super unusual fact-finding missions ๐Ÿ˜ญ It only works if dvips was compiled with the DEBUG option ๐Ÿ”ง When it's nonzero, extra info gets printed to standard error ๐Ÿงพ For the maximum amount of info, use -1 ๐ŸŒŸ Check the Dvips Texinfo manual for more details ๐Ÿ“–
  • -D num โ€” ๐Ÿ“ Sets the resolution to num dpi (dots per inch) โœจ This changes which bitmap fonts get loaded, and also where the letters go in resident PostScript fonts ๐Ÿ’œ It has to be between 10 and 10000 ๐Ÿ“ It affects both horizontal and vertical resolution ๐Ÿฆ‹ If you pick a high resolution (like, above 400 dpi), you should probably use the -Z flag too โš ๏ธ
  • -e num โ€” ๐ŸŽฏ Makes sure each character sits at most num pixels away from its true, resolution-independent position on the page ๐ŸŒธ The default value depends on the resolution ๐Ÿง  Letting characters drift a few pixels from their correctly rounded spots, and then snapping back to the true position at the start of each new word, makes the letter spacing inside words look better โœจ
  • -E โ€” ๐Ÿฆ‹ Makes dvips try to generate an EPSF file with a tight bounding box ๐ŸŽ€ This only works on one-page files ๐Ÿ™…โ€โ™€๏ธ and it only looks at marks made by characters and rules, not by any included graphics ๐Ÿ–ผ๏ธ It also grabs the glyph metrics from the tfm file, so characters that hang outside their enclosing tfm box might confuse it ๐Ÿ˜ต The bounding box may also be a little too loose if a character glyph has big left or right side bearings ๐Ÿ’… Still, this option is great for making small EPSF files for equations, tables, or things like that ๐Ÿซถ (Heads up though, dvips output depends on resolution, so it's not the best for EPSF files, especially if the images are getting scaled; use these EPSF files with a LOT of care ๐Ÿ™ˆ)
  • -f โ€” ๐Ÿšฐ Runs as a filter ๐ŸŒŠ It reads the .dvi file from standard input and writes the PostScript to standard output ๐Ÿ’– Standard input has to be seekable, so it can't be a pipe ๐Ÿ’€ If you absolutely must use a pipe, write a shell script that copies the pipe output into a temporary file, then points dvips at that file ๐Ÿงš This option also turns off the automatic reading of the PRINTER environment variable ๐ŸŽ€ and disables the automatic sending of Control-D if it was turned on with -F or in the configuration file ๐Ÿ”ฅ If you want both, put -F after this option ๐Ÿ‘‘
  • -F โ€” โš ๏ธ Appends Control-D (ASCII code 4) as the very last character of the PostScript file ๐Ÿ–จ๏ธ This is handy when dvips is driving the printer directly instead of going through a spooler, which is common on super tiny systems ๐ŸŒธ > ๐Ÿ›‘ NOTE! DO NOT USE THIS OPTION! ๐Ÿ›‘ It's a hard no, bestie ๐Ÿ˜ญ
  • -G โ€” ๐Ÿ”ค Shifts non-printing characters to higher-numbered positions ๐ŸŒˆ This might come in handy sometimes โœจ
  • -h name โ€” ๐Ÿ“Ž Prepends name as an additional header file ๐ŸŽ€ (But if the name is just -, all header files get suppressed from the output ๐Ÿ™ˆ) This header file gets added to the PostScript userdict ๐Ÿ’œ
  • -i โ€” โœ‚๏ธ Makes each section its own separate file ๐Ÿ“ Sometimes dvips splits the document into "sections" to process them independently, usually for memory reasons ๐Ÿง  With this option, each section goes into its own file ๐Ÿ“ The new file names replace the suffix of the output file name with a three-digit sequence number ๐Ÿ”ข This is most often used together with the -S option, which sets the maximum section length in pages ๐Ÿ“ For example, some phototypesetters can't print more than ten or so consecutive pages before they run out of steam ๐Ÿ˜ฉ So you can use these options to automatically split a book into ten-page sections, each in its own file ๐Ÿ“š๐Ÿฆ‹
  • -j โ€” โฌ‡๏ธ Downloads only the needed characters from Type 1 fonts ๐Ÿ’– This is the default in the current release โœจ Some debugging flags can trace this operation ๐Ÿ” You can also control partial downloading on a per-font basis, using the psfonts.map file ๐Ÿ—บ๏ธ
  • -k โ€” โœ‚๏ธ Prints crop marks ๐ŸŽ€ This makes the paper size bigger by half an inch in each dimension ๐Ÿ“ (So you should set the paper size, either with a paper size special or the -T option ๐ŸŒธ) It moves each page over by a quarter inch and draws cross-style crop marks โž• It's mostly useful with typesetters that can set the page size automatically ๐Ÿค–
  • -K โ€” ๐Ÿงน Removes comments from included PostScript graphics, font files, and headers ๐Ÿซง Sometimes this is necessary to dodge bugs in spoolers or PostScript post-processing programs ๐Ÿ™ƒ The %%Page comments, if left in, often cause trouble ๐Ÿ˜ญ Using this flag can break some included graphics, though, since the PostScript header macros from some software packages read parts of the input stream line by line, looking for a specific comment ๐Ÿ’€ This option is off by default, because PostScript previewers and spoolers have been getting way better ๐ŸŒˆ
  • -l num โ€” ๐Ÿ The last page printed will be the first one numbered num ๐ŸŽฏ The default is the last page in the document ๐Ÿ“„ If num has an equals sign in front of it, then it (and any argument to the -p option) is treated as a sequence number, instead of a value to compare with \count0 values ๐Ÿง  So -l =9 will end with the ninth page of the document, no matter what the pages are actually numbered ๐Ÿ”ข On the flip side, if num has .SEQ tacked on the end, the SEQth occurrence of num is used ๐Ÿ’œ For example, -l 99.2 says to end processing with the second page numbered 99 in the document ๐Ÿฆ‹
  • -m โ€” ๐Ÿ“ฅ Specifies manual feed for the printer ๐Ÿ–จ๏ธโœจ
  • -mode mode โ€” ๐Ÿ”ง Uses mode as the Metafont device name for path searching and font generation ๐Ÿ’– This overrides any value from configuration files ๐Ÿ“ With the default paths, explicitly specifying the mode also makes the program assume the fonts live in a subdirectory named mode ๐Ÿ—‚๏ธ
  • -M โ€” ๐Ÿšซ Turns off the automatic font generation facility ๐Ÿ™…โ€โ™€๏ธ If any fonts are missing, commands to generate them get appended to the file missfont.log in the current directory ๐Ÿ“ You can then run that file and delete it to make the missing fonts ๐Ÿงš
  • -n num โ€” ๐Ÿ”ข At most num pages will be printed ๐Ÿ“„ The default is 100000 ๐Ÿ’ฏ
  • -N โ€” ๐Ÿ™…โ€โ™€๏ธ Turns off structured comments ๐Ÿ’€ This might be needed on some systems that try to interpret PostScript comments in weird ways, or on some PostScript printers ๐Ÿ–จ๏ธ Old versions of TranScript in particular can't handle modern Encapsulated PostScript ๐Ÿ˜ญ
  • -noomega โ€” ๐ŸŒ Disables the use of Omega extensions when interpreting DVI files ๐ŸŽ€ By default, the extra opcodes 129 and 134 are recognized by dvips as Omega or pTeX extensions, and get interpreted as requests to set 2-byte characters ๐Ÿ’œ
  • -noptex โ€” ๐Ÿ‡ฏ๐Ÿ‡ต Disables the use of pTeX extensions when interpreting DVI files ๐ŸŒธ By default, the extra opcodes 130 and 135 are recognized by dvips as pTeX extensions, and get interpreted as requests to set 3-byte characters ๐Ÿฆ‹ The opcode 255 is a request to change the typesetting direction ๐Ÿงญ

The only drawback is that the virtual font array will (at least temporarily) need 65536 or more positions, instead of the default 256 positions ๐Ÿฅบ So the memory requirements of dvips will be somewhat larger ๐Ÿง  If you find that unacceptable, or you run into another problem with the Omega or pTeX extensions, you can switch off the pTeX extension with -noptex, or both with -noomega ๐Ÿ’– (But please do send a bug report if you find such problems ๐Ÿ› โ€” see the bug address in the AUTHORS section below ๐Ÿซถ)

  • -o name โ€” okay so this one sends the output to a file called name ๐Ÿ“„ If you don't give it a name (so -o is the last thing on the command line), it defaults to file.ps, where the input was file.dvi ๐Ÿฆ‹ If you skip this option, whatever default lives in the config file gets used instead โœจ Here's the cute bit: if the first character of the output name is an exclamation mark !, the rest gets handed to popen, so !lpr will just queue the file for printing ๐Ÿ–จ๏ธ This option also turns off the automatic reading of the PRINTER environment variable, and it switches off the automatic sending of control D if you turned that on with -F or in the config file ๐Ÿ’€ Want both? Put -F after this option ๐Ÿซถ
  • -O offset โ€” bestie, this one moves the origin by a set amount ๐ŸŒธ The offset is a comma-separated pair of dimensions, like .1in,-.3cm, using the same syntax as the papersize special ๐ŸŽ€ The default origin sits one inch down and one inch to the right from the upper left corner of the paper, and this shifts it from there by the amount you give ๐Ÿ’…
  • -p num โ€” just like -l, but it only applies to the first page in the document ๐ŸŒท
  • -pp pagelist โ€” this is your page picker ๐Ÿ“ You can give a comma-separated list of pages and ranges (a-b), and those get interpreted as \count0 values ๐Ÿ’œ Any page you don't list simply won't print ๐Ÿ˜ญ You can use multiple -pp options, or squish all your pages and ranges into one -pp option, whatever feels right ๐Ÿซถ
  • -P printername โ€” this sets up the output for your chosen printer ๐Ÿ–จ๏ธ It works by reading in config.printername, which can set the output pipe (like !lpr -Pprintername), the font paths, and any other config.ps defaults for just that printer ๐Ÿฆ‹ Heads up, config.ps gets read before config.printername โœจ Also, right after config.ps, dvips searches for a file called ~/.dvipsrc, which is meant for your personal defaults ๐Ÿ’– If you don't use -P, the PRINTER environment variable gets checked, and if that variable exists and a matching configuration file exists too, that file gets read in ๐Ÿ‘‘
  • -q โ€” quiet mode, no chatter ๐Ÿคซ It won't tell you about pages converted or anything like that, and it only reports errors to standard error ๐Ÿ™ˆ
  • -r โ€” stacks the pages in reverse order ๐Ÿ”„ Normally page 1 prints first, so this flips it ๐ŸŒˆ
  • -R[0|1|2] โ€” the security settings, bestie, and they matter ๐Ÿ”’ -R2 disables shell command execution inside \special'{} (via backticks `), disables config files (via the E option), and blocks opening any absolute filenames ๐Ÿ’€ -R1 is the default: it forbids shell escapes but still allows absolute filenames ๐Ÿซถ -R0 allows both ๐Ÿ˜ฌ The config file option is z
  • -s โ€” wraps the entire global output in a save/restore pair ๐ŸŽ€ > Not truly conformant, so it's not recommended! It's only useful if you're driving the printer directly and don't care too much about the output being portable ๐Ÿ™ˆ
  • -S num โ€” sets the maximum number of pages in each section ๐Ÿ“š This one is most commonly paired with the -i option, so check out that documentation for more info ๐Ÿงš
  • -t papertype โ€” sets the paper type to papertype ๐Ÿ“„ That papertype should be defined in one of the config files, along with the code that selects it ๐Ÿฆ‹ Known types right now include letter, legal, ledger, a4, and a3 โœจ You can also use -t landscape to rotate the document by 90 degrees ๐ŸŒธ If your document isn't letter-sized and you want it rotated, use -t twice: once for the page size, and once for landscape ๐Ÿ’… Don't use any -t option when the DVI file already has a papersize special, like the ones some LaTeX packages add, notably hyperref.sty ๐Ÿ™…โ€โ™€๏ธ

The upper left corner of each page in the .dvi file gets placed one inch from the left and one inch from the top ๐ŸŒท How well this option works depends heavily on the config file ๐ŸŽ€ Also, running the letter, a4, or other PostScript operators makes the document nonconforming and can stop it from printing on certain printers ๐Ÿ˜ญ So the paper size should avoid executing those operators if at all possible ๐Ÿ’€

  • -T papersize โ€” sets the paper size to the pair of dimensions you give ๐Ÿ“ It takes its arguments in the same style as -O, and it overrides any paper size special in the dvi file ๐Ÿ‘‘
  • -u psmapfile โ€” sets psmapfile as the file dvips uses to look up PostScript font aliases ๐Ÿ—บ๏ธ If psmapfile starts with a +, the rest of the name is the map file's name, and that map file gets added to the list of map files instead of replacing it ๐Ÿ’œ Either way, if psmapfile has no extension, .map gets tacked onto the end ๐Ÿฆ‹
  • -U โ€” disables a PostScript virtual memory saving optimization that stores the character metric info in the same string as the bitmap info ๐Ÿ™ˆ This is only needed when you're driving the Xerox 4045 PostScript interpreter ๐Ÿ–จ๏ธ That interpreter has a bug that leaves garbage on the bottom of each character ๐Ÿ’€ > Not recommended unless you absolutely must drive this printer!
  • -v โ€” prints the dvips version number and exits ๐Ÿ”ข
  • -V โ€” downloads non-resident PostScript fonts as bitmaps ๐ŸŒˆ This needs gsftopk or pstopk or some other program like that to generate the required bitmap fonts ๐Ÿงš Good news, these programs come with dvips โœจ
  • -x num โ€” sets the magnification ratio to num/1000 ๐Ÿ” It overrides the magnification in the .dvi file ๐Ÿซถ num has to be between 10 and 100000 ๐Ÿ’… It doesn't have to be a whole number either, you can use a real number for extra precision ๐ŸŒŸ
  • -X num โ€” sets the horizontal resolution to num dots per inch โ†”๏ธ
  • -y num โ€” sets the magnification ratio to num/1000 times the magnification in the .dvi file ๐Ÿ’– Check out -x above for more on this ๐Ÿฆ‹
  • -Y num โ€” sets the vertical resolution to num dots per inch โ†•๏ธ
  • -z โ€” passes html hyperdvi specials through to the output so they can eventually get distilled into PDF ๐ŸŒ This isn't on by default, which avoids including header files unnecessarily and avoids using temporary files when making the output ๐Ÿ™…โ€โ™€๏ธ
  • -Z โ€” compresses bitmapped fonts before they get downloaded, which shrinks the PostScript font-downloading info ๐Ÿ—œ๏ธ It's especially handy at high resolutions or with really big fonts ๐Ÿ’œ Heads up, it'll slow printing down a bit, especially on early 68000-based PostScript printers ๐Ÿข

โœจ SEE ALSO โœจ

afm2tfm(1), tex(1), mf(1), dvitype(1), lpr(1), dvips.texi, https://tug.org/dvips. ๐Ÿ”—

๐ŸŒธ ENVIRONMENT ๐ŸŒธ

Dvipsk uses the same environment variables and algorithms for finding font files as TeX and its friends do ๐Ÿงš For all the details, check out the documentation for the Kpathsea library. (Repeating it here would be way too cumbersome ๐Ÿ™ˆ)

  • KPATHSEA_DEBUG โ€” traces Kpathsea lookups; set it to -1 for complete tracing ๐Ÿ”
  • PRINTER โ€” see above ๐Ÿ–จ๏ธ

NOTES

PostScript is a registered trademark of Adobe Systems Incorporated. โ„ข๏ธ

AUTHOR

Tomas Rokicki wrote it, and Don Knuth extended it to virtual fonts ๐Ÿ‘‘ Karl Berry handled the path searching and configuration modifications ๐Ÿซถ

Maintained in TeX Live! For bug reports or other correspondence, email tex-k@tug.org (https://lists.tug.org/tex-k) ๐Ÿ’Œ


Okay bestie, that's the whole DVIPS(1) page, last updated 24 October 2021 ๐Ÿฆ‹๐Ÿ’– Go print something iconic โœจ๐Ÿ–จ๏ธ

๐Ÿ“ฆ where this page comes from
  • alpine 3.24: texmf-dist-doc 2026.0-r0 ยท LPPL-1.0 AND LPPL-1.1 AND LPPL-1.2 AND LPPL-1.3a AND LPPL-1.3c AND GPL-2.0-only
  • ๐Ÿ’– girlified by anthropic/claude-haiku-5.5 on : a language model's rewrite of the original, under its terms