LaTeX. Использование пакета bytefield

Пакет для LaTeX bytefield позволяет создавать иллюстрации для описания сетевых протоколов. Точнее, иллюстрации, отображающие структуру кадров, используемых сетевыми протоколами для передачи данных. Почитав описание этого пакета, решила попробовать применить его на практике, т.к. в процессе написания руководства пользователя для Беркут-ET сталкивалась с необходимостью приводить рисунок со структурой Ethernet-кадра.

Результаты оказались очень и очень положительными. Время, которое было потрачено на то, чтобы разобраться с особенностями пакета bytefield, с лихвой окупилось полученным результатом. В качестве примера приведу картинку, изображающую структуру пакета IPv4, полученную с использованием возможностей пакета bytefield:

Текст документа для получения этой красивой картинки:

    \setlength{\bitwidth}{3.5mm}
    \setlength{\byteheight}{10mm}

    \begin{bytefield}{32}
    \bitheader{0,3,4,7,8,15,16,18,19,31}\\
    \wordgroupr{Header}
    \bitbox{4}{Version} &
    \bitbox{4}{Header length} &
    \bitbox{8}{Differentiated Services} &
    \bitbox{16}{Total Length}\\
    \bitbox{16}{Identification} &
    \bitbox{3}{Flags} &
    \bitbox{13}{Fragment Offset}\\
    \bitbox{8}{Time to Live} &
    \bitbox{8}{Protocol} &
    \bitbox{16}{Header Checksum}\\
    \bitbox{32}{Source Address} \\
    \bitbox{32}{Destination Address} \\
    \bitbox{32}{Options (if Header Length > 5)}
    \endwordgroupr \\
    \bitbox{32}{Data}\\
    \end{bytefield}

Для получения цветной картинки нужно:

  • определить команду \colorbitbox:
        \newcommand{\colorbitbox}[3]{%
        \rlap{\bitbox{#2}{\color{#1}\rule{\width}{\height}}}%
        \bitbox{#2}{#3}}
    
  • определить цвета:
        \definecolor{lightpink}{rgb}{1,0.7,0.7}
        \definecolor{lightcyan}{rgb}{0.84,1,1}
        \definecolor{peachpuff}{rgb}{1,0.85,0.73}
    
  • вместо команды \bitbox использовать команду \colorbitbox, например:
        \colorbitbox{peachpuff}{4}{Version}
    

    (вместо \bitbox{4}{Version})

А вот и результат:

4 комментария

  1. Антон Фельдман:

    в наших гайдах, как я понимаю, теперь будут такие красивые иллюстрации? здОрово! как в книжках издательства O’Reilly ;)

  2. es:

    будут, конечно. ;)
    быстро, красиво и наглядно получается.

    • Антон Фельдман:

      некоторые, кстати, интересуются, насколько оно удобнее и быстрее, чем просто табличку нарисовать? в чём преимущество, то есть?

  3. es:

    намного удобнее и быстрее, после того, как разберёшься.
    табличку рисовать намного сложнее, все эти "multicolumn", "cline", необходимость задавать ширину столбца…
    здесь же просто указывается размер поля в байтах, ничего вручную считать не надо, и получается аккуратно и красиво. "размер" байта легко переопределяется. подписи (как "Header" в примере) создавать можно.