You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
781 lines
26 KiB
781 lines
26 KiB
%%
|
|
%% This is file `l3backend-dvips.def',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% l3backend-basics.dtx (with options: `package,dvips')
|
|
%% l3backend-color.dtx (with options: `package,dvips')
|
|
%% l3backend-box.dtx (with options: `package,dvips')
|
|
%% l3backend-draw.dtx (with options: `package,dvips')
|
|
%% l3backend-graphics.dtx (with options: `package,dvips')
|
|
%% l3backend-pdf.dtx (with options: `package,dvips')
|
|
%%
|
|
%% Copyright (C) 1990-2020 The LaTeX3 Project
|
|
%%
|
|
%% It may be distributed and/or modified under the conditions of
|
|
%% the LaTeX Project Public License (LPPL), either version 1.3c of
|
|
%% this license or (at your option) any later version. The latest
|
|
%% version of this license is in the file:
|
|
%%
|
|
%% https://www.latex-project.org/lppl.txt
|
|
%%
|
|
%% This file is part of the "l3backend bundle" (The Work in LPPL)
|
|
%% and all files in that bundle must be distributed together.
|
|
%%
|
|
%% File: l3backend-basics.dtx
|
|
\ProvidesExplFile
|
|
{l3backend-dvips.def}{2020-08-07}{}
|
|
{L3 backend support: dvips}
|
|
\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
|
|
\cs_new_protected:Npn \__kernel_backend_literal:n #1
|
|
{ \__kernel_backend_literal:e { \exp_not:n {#1} } }
|
|
\cs_generate_variant:Nn \__kernel_backend_literal:n { x }
|
|
\cs_new_protected:Npn \__kernel_backend_literal_postscript:n #1
|
|
{ \__kernel_backend_literal:n { ps:: #1 } }
|
|
\cs_generate_variant:Nn \__kernel_backend_literal_postscript:n { x }
|
|
\cs_new_protected:Npn \__kernel_backend_postscript:n #1
|
|
{ \__kernel_backend_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
|
|
\cs_generate_variant:Nn \__kernel_backend_postscript:n { x }
|
|
\cs_if_exist:NTF \AtBeginDvi
|
|
{ \AtBeginDvi }
|
|
{ \use:n }
|
|
{
|
|
\bool_lazy_and:nnT
|
|
{ \cs_if_exist_p:N \g__kernel_backend_header_bool }
|
|
{ \g__kernel_backend_header_bool }
|
|
{ \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
|
|
}
|
|
\cs_new_protected:Npn \__kernel_backend_align_begin:
|
|
{
|
|
\__kernel_backend_literal:n { ps::[begin] }
|
|
\__kernel_backend_literal_postscript:n { currentpoint }
|
|
\__kernel_backend_literal_postscript:n { currentpoint~translate }
|
|
}
|
|
\cs_new_protected:Npn \__kernel_backend_align_end:
|
|
{
|
|
\__kernel_backend_literal_postscript:n { neg~exch~neg~exch~translate }
|
|
\__kernel_backend_literal:n { ps::[end] }
|
|
}
|
|
\cs_new_protected:Npn \__kernel_backend_scope_begin:
|
|
{ \__kernel_backend_literal:n { ps:gsave } }
|
|
\cs_new_protected:Npn \__kernel_backend_scope_end:
|
|
{ \__kernel_backend_literal:n { ps:grestore } }
|
|
%% File: l3backend-color.dtx
|
|
\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
|
|
\cs_if_exist:cT { ver@color.sty }
|
|
{
|
|
\cs_set_protected:Npn \__color_backend_pickup:N #1
|
|
{
|
|
\exp_args:NV \tl_if_head_is_space:nTF \current@color
|
|
{
|
|
\tl_set:Nx #1
|
|
{
|
|
{ \exp_after:wN \use:n \current@color }
|
|
{ 1 }
|
|
}
|
|
}
|
|
{
|
|
\exp_last_unbraced:Nx \__color_backend_pickup:w
|
|
{ \current@color } \s__color_stop #1
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
|
|
{ \tl_set:Nn #3 { {#1} {#2} } }
|
|
}
|
|
\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
|
|
{ \__color_backend_select:n { cmyk ~ #1 } }
|
|
\cs_new_protected:Npn \__color_backend_select_gray:n #1
|
|
{ \__color_backend_select:n { gray ~ #1 } }
|
|
\cs_new_protected:Npn \__color_backend_select_rgb:n #1
|
|
{ \__color_backend_select:n { rgb ~ #1 } }
|
|
\cs_new_protected:Npn \__color_backend_select:n #1
|
|
{
|
|
\__kernel_backend_literal:n { color~push~ #1 }
|
|
\__kernel_backend_postscript:n { /color.sc~ { ~ } ~def }
|
|
\__kernel_backend_postscript:n { /color.fc~ { ~ } ~def }
|
|
\group_insert_after:N \__color_backend_reset:
|
|
}
|
|
\cs_new_protected:Npn \__color_backend_reset:
|
|
{ \__kernel_backend_literal:n { color~pop } }
|
|
\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
|
|
{ \__color_backend_select:n {#1} }
|
|
\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
|
|
{ \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } }
|
|
\cs_new_protected:Npn \__color_backend_fill_gray:n #1
|
|
{ \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } }
|
|
\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
|
|
{ \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } }
|
|
\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
|
|
{ \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } }
|
|
\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
|
|
{ \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } }
|
|
\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
|
|
{ \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } }
|
|
\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
|
|
{ \__kernel_backend_postscript:n { /color.fc { #1 } def } }
|
|
\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
|
|
{ \__kernel_backend_postscript:n { /color.sc { #1 } def } }
|
|
%% File: l3backend-box.dtx
|
|
\cs_new_protected:Npn \__box_backend_clip:N #1
|
|
{
|
|
\__kernel_backend_scope_begin:
|
|
\__kernel_backend_align_begin:
|
|
\__kernel_backend_literal_postscript:n { matrix~currentmatrix }
|
|
\__kernel_backend_literal_postscript:n
|
|
{ Resolution~72~div~VResolution~72~div~scale }
|
|
\__kernel_backend_literal_postscript:n { DVImag~dup~scale }
|
|
\__kernel_backend_literal_postscript:x
|
|
{
|
|
0 ~
|
|
\dim_to_decimal_in_bp:n { \box_dp:N #1 } ~
|
|
\dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
|
|
\dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~
|
|
rectclip
|
|
}
|
|
\__kernel_backend_literal_postscript:n { setmatrix }
|
|
\__kernel_backend_align_end:
|
|
\hbox_overlap_right:n { \box_use:N #1 }
|
|
\__kernel_backend_scope_end:
|
|
\skip_horizontal:n { \box_wd:N #1 }
|
|
}
|
|
\cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
|
|
{ \exp_args:NNf \__box_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
|
|
\cs_new_protected:Npn \__box_backend_rotate_aux:Nn #1#2
|
|
{
|
|
\__kernel_backend_scope_begin:
|
|
\__kernel_backend_align_begin:
|
|
\__kernel_backend_literal_postscript:x
|
|
{
|
|
\fp_compare:nNnTF {#2} = \c_zero_fp
|
|
{ 0 }
|
|
{ \fp_eval:n { round ( -(#2) , 5 ) } } ~
|
|
rotate
|
|
}
|
|
\__kernel_backend_align_end:
|
|
\box_use:N #1
|
|
\__kernel_backend_scope_end:
|
|
}
|
|
\cs_new_protected:Npn \__box_backend_scale:Nnn #1#2#3
|
|
{
|
|
\__kernel_backend_scope_begin:
|
|
\__kernel_backend_align_begin:
|
|
\__kernel_backend_literal_postscript:x
|
|
{
|
|
\fp_eval:n { round ( #2 , 5 ) } ~
|
|
\fp_eval:n { round ( #3 , 5 ) } ~
|
|
scale
|
|
}
|
|
\__kernel_backend_align_end:
|
|
\hbox_overlap_right:n { \box_use:N #1 }
|
|
\__kernel_backend_scope_end:
|
|
}
|
|
%% File: l3backend-draw.dtx
|
|
\cs_new_eq:NN \__draw_backend_literal:n \__kernel_backend_literal_postscript:n
|
|
\cs_generate_variant:Nn \__draw_backend_literal:n { x }
|
|
\cs_new_protected:Npn \__draw_backend_begin:
|
|
{
|
|
\__kernel_backend_literal:n { ps::[begin] }
|
|
\__draw_backend_literal:n { @beginspecial }
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_end:
|
|
{
|
|
\__draw_backend_literal:n { @endspecial }
|
|
\__kernel_backend_literal:n { ps::[end] }
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_scope_begin:
|
|
{ \__draw_backend_literal:n { save } }
|
|
\cs_new_protected:Npn \__draw_backend_scope_end:
|
|
{ \__draw_backend_literal:n { restore } }
|
|
\cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\dim_to_decimal_in_bp:n {#1} ~
|
|
\dim_to_decimal_in_bp:n {#2} ~ moveto
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_lineto:nn #1#2
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\dim_to_decimal_in_bp:n {#1} ~
|
|
\dim_to_decimal_in_bp:n {#2} ~ lineto
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_rectangle:nnnn #1#2#3#4
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
|
|
\dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
|
|
moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_curveto:nnnnnn #1#2#3#4#5#6
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
|
|
\dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
|
|
\dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
|
|
curveto
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_evenodd_rule:
|
|
{ \bool_gset_true:N \g__draw_draw_eor_bool }
|
|
\cs_new_protected:Npn \__draw_backend_nonzero_rule:
|
|
{ \bool_gset_false:N \g__draw_draw_eor_bool }
|
|
\bool_new:N \g__draw_draw_eor_bool
|
|
\cs_new_protected:Npn \__draw_backend_closepath:
|
|
{ \__draw_backend_literal:n { closepath } }
|
|
\cs_new_protected:Npn \__draw_backend_stroke:
|
|
{
|
|
\__draw_backend_literal:n { gsave }
|
|
\__draw_backend_literal:n { color.sc }
|
|
\__draw_backend_literal:n { stroke }
|
|
\__draw_backend_literal:n { grestore }
|
|
\bool_if:NT \g__draw_draw_clip_bool
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
clip
|
|
}
|
|
}
|
|
\__draw_backend_literal:n { newpath }
|
|
\bool_gset_false:N \g__draw_draw_clip_bool
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_closestroke:
|
|
{
|
|
\__draw_backend_closepath:
|
|
\__draw_backend_stroke:
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_fill:
|
|
{
|
|
\__draw_backend_literal:n { gsave }
|
|
\__draw_backend_literal:n { color.fc }
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
fill
|
|
}
|
|
\__draw_backend_literal:n { grestore }
|
|
\bool_if:NT \g__draw_draw_clip_bool
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
clip
|
|
}
|
|
}
|
|
\__draw_backend_literal:n { newpath }
|
|
\bool_gset_false:N \g__draw_draw_clip_bool
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_fillstroke:
|
|
{
|
|
\__draw_backend_literal:n { gsave }
|
|
\__draw_backend_literal:n { color.sc }
|
|
\__draw_backend_literal:n { color.fc }
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
fill
|
|
}
|
|
\__draw_backend_literal:n { grestore }
|
|
\__draw_backend_literal:n { stroke }
|
|
\bool_if:NT \g__draw_draw_clip_bool
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
clip
|
|
}
|
|
}
|
|
\__draw_backend_literal:n { newpath }
|
|
\bool_gset_false:N \g__draw_draw_clip_bool
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_clip:
|
|
{ \bool_gset_true:N \g__draw_draw_clip_bool }
|
|
\bool_new:N \g__draw_draw_clip_bool
|
|
\cs_new_protected:Npn \__draw_backend_discardpath:
|
|
{
|
|
\bool_if:NT \g__draw_draw_clip_bool
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
\bool_if:NT \g__draw_draw_eor_bool { eo }
|
|
clip
|
|
}
|
|
}
|
|
\__draw_backend_literal:n { newpath }
|
|
\bool_gset_false:N \g__draw_draw_clip_bool
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_dash_pattern:nn #1#2
|
|
{
|
|
\__draw_backend_literal:x
|
|
{
|
|
[
|
|
\exp_args:Nf \use:n
|
|
{ \clist_map_function:nN {#1} \__draw_backend_dash:n }
|
|
] ~
|
|
\dim_to_decimal_in_bp:n {#2} ~ setdash
|
|
}
|
|
}
|
|
\cs_new:Npn \__draw_backend_dash:n #1
|
|
{ ~ \dim_to_decimal_in_bp:n {#1} }
|
|
\cs_new_protected:Npn \__draw_backend_linewidth:n #1
|
|
{
|
|
\__draw_backend_literal:x
|
|
{ \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_miterlimit:n #1
|
|
{ \__draw_backend_literal:n { #1 ~ setmiterlimit } }
|
|
\cs_new_protected:Npn \__draw_backend_cap_butt:
|
|
{ \__draw_backend_literal:n { 0 ~ setlinecap } }
|
|
\cs_new_protected:Npn \__draw_backend_cap_round:
|
|
{ \__draw_backend_literal:n { 1 ~ setlinecap } }
|
|
\cs_new_protected:Npn \__draw_backend_cap_rectangle:
|
|
{ \__draw_backend_literal:n { 2 ~ setlinecap } }
|
|
\cs_new_protected:Npn \__draw_backend_join_miter:
|
|
{ \__draw_backend_literal:n { 0 ~ setlinejoin } }
|
|
\cs_new_protected:Npn \__draw_backend_join_round:
|
|
{ \__draw_backend_literal:n { 1 ~ setlinejoin } }
|
|
\cs_new_protected:Npn \__draw_backend_join_bevel:
|
|
{ \__draw_backend_literal:n { 2 ~ setlinejoin } }
|
|
\cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
|
|
{
|
|
\__draw_backend_literal:n
|
|
{ [ #1 ~ #2 ~ #3 ~ #4 ~ 0 ~ 0 ] ~ concat }
|
|
}
|
|
\cs_new_protected:Npn \__draw_backend_box_use:Nnnnn #1#2#3#4#5
|
|
{
|
|
\__draw_backend_literal:n { @endspecial }
|
|
\__draw_backend_literal:n { [end] }
|
|
\__draw_backend_literal:n { [begin] }
|
|
\__draw_backend_literal:n { save }
|
|
\__draw_backend_literal:n { currentpoint }
|
|
\__draw_backend_literal:n { currentpoint~translate }
|
|
\__draw_backend_cm:nnnn { 1 } { 0 } { 0 } { -1 }
|
|
\__draw_backend_cm:nnnn {#2} {#3} {#4} {#5}
|
|
\__draw_backend_cm:nnnn { 1 } { 0 } { 0 } { -1 }
|
|
\__draw_backend_literal:n { neg~exch~neg~exch~translate }
|
|
\__draw_backend_literal:n { [end] }
|
|
\hbox_overlap_right:n { \box_use:N #1 }
|
|
\__draw_backend_literal:n { [begin] }
|
|
\__draw_backend_literal:n { restore }
|
|
\__draw_backend_literal:n { [end] }
|
|
\__draw_backend_literal:n { [begin] }
|
|
\__draw_backend_literal:n { @beginspecial }
|
|
}
|
|
%% File: l3backend-graphics.dtx
|
|
\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
|
|
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
|
|
{
|
|
\__kernel_backend_literal:x
|
|
{
|
|
PSfile = #1 \c_space_tl
|
|
llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
|
|
lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
|
|
urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
|
|
ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
|
|
}
|
|
}
|
|
%% File: l3backend-pdf.dtx
|
|
\box_new:N \l__pdf_internal_box
|
|
\cs_new_protected:Npn \__pdf_backend_pdfmark:n #1
|
|
{ \__kernel_backend_postscript:n { mark #1 ~ pdfmark } }
|
|
\cs_generate_variant:Nn \__pdf_backend_pdfmark:n { x }
|
|
\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2
|
|
{ \__pdf_backend_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } }
|
|
\cs_new_protected:Npn \__pdf_backend_info_gput:nn #1#2
|
|
{ \__pdf_backend_pdfmark:n { /#1 ~ #2 /DOCINFO } }
|
|
\int_new:N \g__pdf_backend_object_int
|
|
\prop_new:N \g__pdf_backend_object_prop
|
|
\cs_new_protected:Npn \__pdf_backend_object_new:nn #1#2
|
|
{
|
|
\int_gincr:N \g__pdf_backend_object_int
|
|
\int_const:cn
|
|
{ c__pdf_backend_object_ \tl_to_str:n {#1} _int }
|
|
{ \g__pdf_backend_object_int }
|
|
\prop_gput:Nnn \g__pdf_backend_object_prop {#1} {#2}
|
|
}
|
|
\cs_new:Npn \__pdf_backend_object_ref:n #1
|
|
{ { pdf.obj \int_use:c { c__pdf_backend_object_ \tl_to_str:n {#1} _int } } }
|
|
\cs_new_protected:Npn \__pdf_backend_object_write:nn #1#2
|
|
{
|
|
\__pdf_backend_pdfmark:x
|
|
{
|
|
/_objdef ~ \__pdf_backend_object_ref:n {#1}
|
|
/type
|
|
\str_case_e:nn
|
|
{ \prop_item:Nn \g__pdf_backend_object_prop {#1} }
|
|
{
|
|
{ array } { /array }
|
|
{ dict } { /dict }
|
|
{ fstream } { /stream }
|
|
{ stream } { /stream }
|
|
}
|
|
/OBJ
|
|
}
|
|
\use:c
|
|
{ __pdf_backend_object_write_ \prop_item:Nn \g__pdf_backend_object_prop {#1} :nn }
|
|
{ \__pdf_backend_object_ref:n {#1} } {#2}
|
|
}
|
|
\cs_generate_variant:Nn \__pdf_backend_object_write:nn { nx }
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_array:nn #1#2
|
|
{
|
|
\__pdf_backend_pdfmark:x
|
|
{ #1 ~0~ [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL }
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_dict:nn #1#2
|
|
{
|
|
\__pdf_backend_pdfmark:x
|
|
{ #1 << \exp_not:n {#2} >> /PUT }
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nn #1#2
|
|
{
|
|
\exp_args:Nx
|
|
\__pdf_backend_object_write_fstream:nnn {#1} #2
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_fstream:nnn #1#2#3
|
|
{
|
|
\__kernel_backend_postscript:n
|
|
{
|
|
SDict ~ begin ~
|
|
mark ~ #1 ~ << #2 >> /PUT ~ pdfmark ~
|
|
mark ~ #1 ~ ( #3 )~ ( r )~ file ~ /PUT ~ pdfmark ~
|
|
end
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_stream:nn #1#2
|
|
{
|
|
\exp_args:Nx
|
|
\__pdf_backend_object_write_stream:nnn {#1} #2
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_write_stream:nnn #1#2#3
|
|
{
|
|
\__kernel_backend_postscript:n
|
|
{
|
|
mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
|
|
mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_object_now:nn #1#2
|
|
{
|
|
\int_gincr:N \g__pdf_backend_object_int
|
|
\__pdf_backend_pdfmark:x
|
|
{
|
|
/_objdef ~ { pdf.obj \int_use:N \g__pdf_backend_object_int }
|
|
/type
|
|
\str_case:nn
|
|
{#1}
|
|
{
|
|
{ array } { /array }
|
|
{ dict } { /dict }
|
|
{ fstream } { /stream }
|
|
{ stream } { /stream }
|
|
}
|
|
/OBJ
|
|
}
|
|
\exp_args:Nnx \use:c { __pdf_backend_object_write_ #1 :nn }
|
|
{ { pdf.obj \int_use:N \g__pdf_backend_object_int } } {#2}
|
|
}
|
|
\cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
|
|
\cs_new:Npn \__pdf_backend_object_last:
|
|
{ { pdf.obj \int_use:N \g__pdf_backend_object_int } }
|
|
\cs_new:Npn \__pdf_backend_pageobject_ref:n #1
|
|
{ { Page #1 } }
|
|
\box_new:N \l__pdf_backend_content_box
|
|
\box_new:N \l__pdf_backend_model_box
|
|
\int_new:N \g__pdf_backend_annotation_int
|
|
\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
|
|
{
|
|
\exp_args:Nf \__pdf_backend_annotation_aux:nnnn
|
|
{ \dim_eval:n {#1} } {#2} {#3} {#4}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_annotation_aux:nnnn #1#2#3#4
|
|
{
|
|
\box_move_down:nn {#3}
|
|
{ \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } }
|
|
\box_move_up:nn {#2}
|
|
{
|
|
\hbox:n
|
|
{
|
|
\tex_kern:D #1 \scan_stop:
|
|
\__kernel_backend_postscript:n { pdf.save.ur }
|
|
\tex_kern:D -#1 \scan_stop:
|
|
}
|
|
}
|
|
\int_gincr:N \g__pdf_backend_object_int
|
|
\int_gset_eq:NN \g__pdf_backend_annotation_int \g__pdf_backend_object_int
|
|
\__pdf_backend_pdfmark:x
|
|
{
|
|
/_objdef { pdf.obj \int_use:N \g__pdf_backend_object_int }
|
|
pdf.rect
|
|
#4 ~
|
|
/ANN
|
|
}
|
|
}
|
|
\cs_new:Npn \__pdf_backend_annotation_last:
|
|
{ { pdf.obj \int_use:N \g__pdf_backend_annotation_int } }
|
|
\int_new:N \g__pdf_backend_link_int
|
|
\tl_new:N \g__pdf_backend_link_dict_tl
|
|
\int_new:N \g__pdf_backend_link_sf_int
|
|
\bool_new:N \g__pdf_backend_link_math_bool
|
|
\bool_new:N \g__pdf_backend_link_bool
|
|
\tl_new:N \l__pdf_breaklink_pdfmark_tl
|
|
\tl_set:Nn \l__pdf_breaklink_pdfmark_tl { pdfmark }
|
|
\cs_new_protected:Npn \__pdf_breaklink_postscript:n #1 { }
|
|
\cs_new_eq:NN \__pdf_breaklink_usebox:N \box_use:N
|
|
\cs_new_protected:Npn \__pdf_backend_link_begin_goto:nnw #1#2
|
|
{ \__pdf_backend_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
|
|
\cs_new_protected:Npn \__pdf_backend_link_begin_user:nnw #1#2
|
|
{ \__pdf_backend_link_begin:nw {#1#2} }
|
|
\cs_new_protected:Npn \__pdf_backend_link_begin:nw #1
|
|
{
|
|
\bool_if:NF \g__pdf_backend_link_bool
|
|
{ \__pdf_backend_link_begin_aux:nw {#1} }
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_begin_aux:nw #1
|
|
{
|
|
\bool_gset_true:N \g__pdf_backend_link_bool
|
|
\__kernel_backend_postscript:n
|
|
{ /pdf.link.dict ( #1 ) def }
|
|
\tl_gset:Nn \g__pdf_backend_link_dict_tl {#1}
|
|
\__pdf_backend_link_sf_save:
|
|
\mode_if_math:TF
|
|
{ \bool_gset_true:N \g__pdf_backend_link_math_bool }
|
|
{ \bool_gset_false:N \g__pdf_backend_link_math_bool }
|
|
\hbox_set:Nw \l__pdf_backend_content_box
|
|
\__pdf_backend_link_sf_restore:
|
|
\bool_if:NT \g__pdf_backend_link_math_bool
|
|
{ \c_math_toggle_token }
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_end:
|
|
{
|
|
\bool_if:NT \g__pdf_backend_link_bool
|
|
{ \__pdf_backend_link_end_aux: }
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_end_aux:
|
|
{
|
|
\bool_if:NT \g__pdf_backend_link_math_bool
|
|
{ \c_math_toggle_token }
|
|
\__pdf_backend_link_sf_save:
|
|
\hbox_set_end:
|
|
\__pdf_backend_link_minima:
|
|
\hbox_set:Nn \l__pdf_backend_model_box { Gg }
|
|
\exp_args:Nx \__pdf_backend_link_outerbox:n
|
|
{
|
|
\int_if_odd:nTF { \value { page } }
|
|
{ \oddsidemargin }
|
|
{ \evensidemargin }
|
|
}
|
|
\box_move_down:nn { \box_dp:N \l__pdf_backend_content_box }
|
|
{ \hbox:n { \__kernel_backend_postscript:n { pdf.save.linkll } } }
|
|
\__pdf_breaklink_postscript:n { pdf.bordertracking.begin }
|
|
\__pdf_breaklink_usebox:N \l__pdf_backend_content_box
|
|
\__pdf_breaklink_postscript:n { pdf.bordertracking.end }
|
|
\box_move_up:nn { \box_ht:N \l__pdf_backend_content_box }
|
|
{
|
|
\hbox:n
|
|
{ \__kernel_backend_postscript:n { pdf.save.linkur } }
|
|
}
|
|
\int_gincr:N \g__pdf_backend_object_int
|
|
\int_gset_eq:NN \g__pdf_backend_link_int \g__pdf_backend_object_int
|
|
\__kernel_backend_postscript:x
|
|
{
|
|
mark
|
|
/_objdef { pdf.obj \int_use:N \g__pdf_backend_link_int }
|
|
\g__pdf_backend_link_dict_tl \c_space_tl
|
|
pdf.rect
|
|
/ANN ~ \l__pdf_breaklink_pdfmark_tl
|
|
}
|
|
\__pdf_backend_link_sf_restore:
|
|
\bool_gset_false:N \g__pdf_backend_link_bool
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_minima:
|
|
{
|
|
\hbox_set:Nn \l__pdf_backend_model_box { Gg }
|
|
\__kernel_backend_postscript:x
|
|
{
|
|
/pdf.linkdp.pad ~
|
|
\dim_to_decimal:n
|
|
{
|
|
\dim_max:nn
|
|
{
|
|
\box_dp:N \l__pdf_backend_model_box
|
|
- \box_dp:N \l__pdf_backend_content_box
|
|
}
|
|
{ 0pt }
|
|
} ~
|
|
pdf.pt.dvi ~ def
|
|
/pdf.linkht.pad ~
|
|
\dim_to_decimal:n
|
|
{
|
|
\dim_max:nn
|
|
{
|
|
\box_ht:N \l__pdf_backend_model_box
|
|
- \box_ht:N \l__pdf_backend_content_box
|
|
}
|
|
{ 0pt }
|
|
} ~
|
|
pdf.pt.dvi ~ def
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_outerbox:n #1
|
|
{
|
|
\__kernel_backend_postscript:x
|
|
{
|
|
/pdf.outerbox
|
|
[
|
|
\dim_to_decimal:n {#1} ~
|
|
\dim_to_decimal:n { -\box_dp:N \l__pdf_backend_model_box } ~
|
|
\dim_to_decimal:n { #1 + \textwidth } ~
|
|
\dim_to_decimal:n { \box_ht:N \l__pdf_backend_model_box }
|
|
]
|
|
[ exch { pdf.pt.dvi } forall ] def
|
|
/pdf.baselineskip ~
|
|
\dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt
|
|
{ pdf.pt.dvi ~ def }
|
|
{ pop ~ pop }
|
|
ifelse
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_sf_save:
|
|
{
|
|
\int_gset:Nn \g__pdf_backend_link_sf_int
|
|
{
|
|
\mode_if_horizontal:TF
|
|
{ \tex_spacefactor:D }
|
|
{ 0 }
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_link_sf_restore:
|
|
{
|
|
\mode_if_horizontal:T
|
|
{
|
|
\int_compare:nNnT \g__pdf_backend_link_sf_int > { 0 }
|
|
{ \int_set_eq:NN \tex_spacefactor:D \g__pdf_backend_link_sf_int }
|
|
}
|
|
}
|
|
\use_none:n
|
|
{
|
|
\cs_if_exist:NT \@makecol@hook
|
|
{
|
|
\tl_put_right:Nn \@makecol@hook
|
|
{
|
|
\box_if_empty:NF \@cclv
|
|
{
|
|
\vbox_set:Nn \@cclv
|
|
{
|
|
\__kernel_backend_postscript:n
|
|
{
|
|
pdf.globaldict /pdf.brokenlink.rect ~ known
|
|
{ pdf.bordertracking.continue }
|
|
if
|
|
}
|
|
\vbox_unpack_drop:N \@cclv
|
|
\__kernel_backend_postscript:n
|
|
{ pdf.bordertracking.endpage }
|
|
}
|
|
}
|
|
}
|
|
\tl_set:Nn \l__pdf_breaklink_pdfmark_tl { pdf.pdfmark }
|
|
\cs_set_eq:NN \__pdf_breaklink_postscript:n \__kernel_backend_postscript:n
|
|
\cs_set_eq:NN \__pdf_breaklink_usebox:N \hbox_unpack:N
|
|
}
|
|
}
|
|
\cs_new:Npn \__pdf_backend_link_last:
|
|
{ { pdf.obj \int_use:N \g__pdf_backend_link_int } }
|
|
\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
|
|
{
|
|
\__kernel_backend_postscript:x
|
|
{
|
|
/pdf.linkmargin { \dim_to_decimal:n {#1} ~ pdf.pt.dvi } def
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
|
|
{
|
|
\__kernel_backend_postscript:n { pdf.dest.anchor }
|
|
\__pdf_backend_pdfmark:x
|
|
{
|
|
/View
|
|
[
|
|
\str_case:nnF {#2}
|
|
{
|
|
{ xyz } { /XYZ ~ pdf.dest.point ~ null }
|
|
{ fit } { /Fit }
|
|
{ fitb } { /FitB }
|
|
{ fitbh } { /FitBH ~ pdf.dest.y }
|
|
{ fitbv } { /FitBV ~ pdf.dest.x }
|
|
{ fith } { /FitH ~ pdf.dest.y }
|
|
{ fitv } { /FitV ~ pdf.dest.x }
|
|
}
|
|
{
|
|
/XYZ ~ pdf.dest.point ~ \fp_eval:n { (#2) / 100 }
|
|
}
|
|
]
|
|
/Dest ( \exp_not:n {#1} ) cvn
|
|
/DEST
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_destination_box:nn #1#2
|
|
{
|
|
\group_begin:
|
|
\hbox_set:Nn \l__pdf_internal_box {#2}
|
|
\box_move_down:nn
|
|
{ \box_dp:N \l__pdf_internal_box }
|
|
{ \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } }
|
|
\box_use:N \l__pdf_internal_box
|
|
\box_move_up:nn
|
|
{ \box_ht:N \l__pdf_internal_box }
|
|
{ \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } } }
|
|
\__pdf_backend_pdfmark:n
|
|
{
|
|
/View
|
|
[
|
|
/FitR ~
|
|
pdf.llx ~ pdf.lly ~ pdf.dest2device ~
|
|
pdf.urx ~ pdf.ury ~ pdf.dest2device
|
|
]
|
|
/Dest ( #1 ) cvn
|
|
/DEST
|
|
}
|
|
\group_end:
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_compresslevel:n #1
|
|
{
|
|
\int_compare:nNnT {#1} = 0
|
|
{
|
|
\__kernel_backend_literal_postscript:n
|
|
{
|
|
/setdistillerparams ~ where
|
|
{ pop << /CompressPages ~ false >> setdistillerparams }
|
|
if
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_compress_objects:n #1
|
|
{
|
|
\bool_if:nF {#1}
|
|
{
|
|
\__kernel_backend_literal_postscript:n
|
|
{
|
|
/setdistillerparams ~ where
|
|
{ pop << /CompressStreams ~ false >> setdistillerparams }
|
|
if
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npn \__pdf_backend_version_major_gset:n #1 { }
|
|
\cs_new_protected:Npn \__pdf_backend_version_minor_gset:n #1 { }
|
|
\cs_new:Npn \__pdf_backend_version_major: { -1 }
|
|
\cs_new:Npn \__pdf_backend_version_minor: { -1 }
|
|
\cs_new_protected:Npn \__pdf_backend_bdc:nn #1#2
|
|
{ \__pdf_backend_pdfmark:n { /#1 ~ #2 /BDC } }
|
|
\cs_new_protected:Npn \__pdf_backend_emc:
|
|
{ \__pdf_backend_pdfmark:n { /EMC } }
|
|
%%
|
|
%%
|
|
%% End of file `l3backend-dvips.def'.
|
|
|