Зачем грофф -Тдви | dvipdf и groff -Tpdf дают очень разные результаты?

(как обсуждалось в комментариях, вместо этого используйте tput, если он у вас есть)

Использование оболочки bourne иecho(встроенной -в )команды, которая понимает escape-последовательность ANSI \eс опцией -e:

black()  { IFS= ; while read -r line; do echo -e '\e[30m'$line'\e[0m'; done; }
red()    { IFS= ; while read -r line; do echo -e '\e[31m'$line'\e[0m'; done; }
green()  { IFS= ; while read -r line; do echo -e '\e[32m'$line'\e[0m'; done; }
yellow() { IFS= ; while read -r line; do echo -e '\e[33m'$line'\e[0m'; done; }
blue()   { IFS= ; while read -r line; do echo -e '\e[34m'$line'\e[0m'; done; }
purple() { IFS= ; while read -r line; do echo -e '\e[35m'$line'\e[0m'; done; }
cyan()   { IFS= ; while read -r line; do echo -e '\e[36m'$line'\e[0m'; done; }
white()  { IFS= ; while read -r line; do echo -e '\e[37m'$line'\e[0m'; done; }

echo '    foo\n    bar' | red

или более общий сценарий оболочки (, скажем,/usr/local/bin/colorize):

#!/bin/sh

usage() {
    echo 'usage:' >&2
    echo '  some-command | colorize {black, red, green, yellow, blue, purple, cyan, white}' >&2
    exit 1
}

[ -z "$1" ] && usage

case $1 in
    black)  color='\e[30m' ;;
    red)    color='\e[31m' ;;
    green)  color='\e[32m' ;;
    yellow) color='\e[33m' ;;
    blue)   color='\e[34m' ;;
    purple) color='\e[35m' ;;
    cyan)   color='\e[36m' ;;
    white)  color='\e[36m' ;;
    *) usage ;;
esac

IFS=
while read -r line; do
    echo -e $color$line'\e[0m'
done

IFS=необходим для предотвращения обрезки пробелов (подробности см. в POSIX ).

how IFS works

2
02.09.2021, 22:00
1 ответ

Прежде всего:Приветствую тебя, юный падаван, за почитание древних путей!

Результаты выглядят по-разному, потому что использовались два разных наборщика (, которые использовали разные шрифты поверх этого ).

При использовании параметра-Tpdf выходные данные обрабатываются для PostScript -, подобного верстальщику(*)и стандартным шрифтам (Times -Roman, Times -. Используется курсив, символ ). Документ PDF не содержит определений шрифтов, но зависит от средства просмотра PDF, чтобы иметь под рукой необходимые шрифты PostScript. Но обычно программа просмотра и/или принтер имеют только очень «похожие» шрифты, которые могут немного отличаться -, что приводит к незначительным смещениям.

При использовании параметра-Tdvi выходные данные отображаются для набора текста TeX с использованием шрифтов TeX. Результирующий код PDF, созданный dvipdf , включает полные определения шрифтов TeX. Это приводит к увеличению размера выходных файлов, но позволяет избежать дальнейших ошибок, вызванных заменой шрифтов.

Спасибо, что подняли этот интересный вопрос!

*)Я пишу PostScript-как , потому что я провел некоторое тестирование, и результаты-Tpdf сильно отличаются от-Tps (, чего они не должны ). На самом деле теперь я считаю цель PDF неработающей и предлагаю использовать-Tps , а затем преобразовать файл PostScript в файл PDF )

.
3
06.09.2021, 12:57

Теги

Похожие вопросы