[dvipdfmx] Possible extensions to color special support

Shunsaku Hirata shunsaku.hirata74 at gmail.com
Wed Sep 2 17:30:13 CEST 2020


Hi Joseph,

> The first area is the stroke/fill ('non-stroke') split. At present,
> "pdf:bcolor" pushes both stroke and non-stroke color to the stack. One
> can set the two separately, but only by using a PDF literal, which
> therefore does not go to the stack. This can lead to 'interesting'
> outcomes if the two are inter-mixed. Would something like
>
>      pdf:strokecolor / pdf:sc
>      pdf:fillcolor / pdf:fc
>
> be possible to set only the stroke or fill. Both of these would still
> 'pair' with pdf:ec, in the same way in pdfTeX one can do
>
>      \pdfcolorstack <n> push {0.1 0.2 0.3 0.4 k}
>      ...
>      \pdfcolorstack <n> pop
>
> as well as
>
>      \pdfcolorstack <n> push {0.1 0.2 0.3 0.4 k 0.1 0.2 0.3 0.4 K}
>      ...
>      \pdfcolorstack <n> pop

So pdf:sc in the example above pushes specified stroke color
and current fill color onto the color stack.

Both adding new specials and extending existing pdf:bc special
to accept "stroke" and "fill" keyword like

  pdf:bc fill [1 0 0]

can be easily done.

> The second thing is highlighted in some ways by that pdfTeX example: the
> existence of more than one stack. Additional stacks are useful for
> footnotes, transparency, etc., and so are less easily supported using
> dvipdfmx than with pdfTeX. (When using dvips, one can code in the stacks
> manually using PostScript.) The current 'main' stack approach must of
> course not change, so any pdf:bc or similar will always use this main
> 'stack 0'. A possible way to add additional stacks would be to work
> closer to pdfTeX, i.e. have them take 'raw' PDF specs, so perhaps
> pdf:colorstack/pdf:cs
>
>      \special{pdf:cs 1 push 0.1 0.2 0.3 0.4 k}
>      ...
>      \special{pdf:cs 1 pop}
>
> i.e. syntax
>
>      pdf:cs <n> [push|pop] <PDF literal>
>

I rather want to avoid using "PDF literal" which can affect outside
the special command as much as possible since this makes it
difficult to manage things properly.

Anyway, I will consider extending dvipdfmx to support such features.

For transparency support, I already added new special commands
pdf:bxgstate and pdf:exgstate which can be used as

  \special{pdf:bxgstate << /CA 0.5 /ca 0.5 >>}
  Transparent text.
  \special{pdf:exgstate}%

where a dictionary object representing ExtGState should be supplied
as an argument.

Thanks,
Shunsaku Hirata


More information about the dvipdfmx mailing list.