Dopo la nostra lunga selezione di informazioni siamo stati in grado di risolvere questa situazione che alcuni lettori presentano. Ti offriamo la soluzione e speriamo di esserti di grande aiuto.
Soluzione:
Questa non è una soluzione a questa domanda, e viene postata qui solo per mostrare ciò che si può ottenere con tikz/pgf (come indicato nella domanda).
Aggiornamento: risposta solo per PGF
Ecco una soluzione ottimizzata che utilizza solo pgf
. Ha meno spese rispetto all'uso di tikz
. Dopo averci pensato troppo a lungo, credo che questa sia la soluzione migliore in assoluto. È molto più semplice da implementare, funziona con altri pacchetti e ha un impatto minimo sulla velocità.
Le modalità di fusione sembrano inaffidabili in tutti i visualizzatori, a meno che non si faccia attenzione a come si dispone il testo nel file pgfpicture
quindi non credo che ci sia nulla da guadagnare usandole.
%! TeX Program = lualatex
documentclass{article}
usepackage{xparse}
usepackage{pgf}
ExplSyntaxOn
NewDocumentEnvironment { transparencygroup }
{ m +b }
{
par
dim_set_eq:NN l_tmpa_dim prevdepth
noindent
pgfrememberpicturepositiononpagefalse
begin { pgfpicture }
pgfsetfillopacity { #1 }
begin { pgftransparencygroup } [ isolated=false ]
pgfpathmoveto { pgfpointorigin }
pgftext [ base ]
{
vbox:n
{
dim_set_eq:NN prevdepth l_tmpa_dim
#2
}
}
end { pgftransparencygroup }
end { pgfpicture }
}
{ }
NewDocumentCommand texttransparencygroup { m m }
{
mode_leave_vertical:
hbox:n
{
pgfrememberpicturepositiononpagefalse
begin { pgfpicture }
pgfsetfillopacity { #1 }
begin { pgftransparencygroup } [ isolated=true ]
pgfpathmoveto { pgfpointorigin }
pgftext [ base ] { #2 }
end { pgftransparencygroup }
end { pgfpicture }
}
}
ExplSyntaxOff
usepackage{fontspec}
newfontfamily{devanagari}{Noto Sans Devanagari}[Script=Devanagari, Renderer=HarfBuzz]
begin{document}
Huge
English {devanagari texttransparencygroup{0.4}{एक गांव में पिताजी}} English
devanagaricolor{red}
begin{transparencygroup}{0.5}
एक गांव में पिताजी
end{transparencygroup}
vskip-8mm
color{green}
begin{transparencygroup}{0.25}
एक गांव में पिताजी
end{transparencygroup}
end{document}
Risposta di TIKZ
Il vostro PDF da InDesign utilizza essenzialmente lo stesso metodo di tikz. Crea un Form XObject con un gruppo di trasparenza e vi inserisce il testo. Quindi inserisce questo Form XObject nel flusso della pagina. Anche se non si usa tikz, si dovrà comunque racchiudere il contenuto in un XObject. Il gruppo di trasparenza non è solo un flag grafico che si può attivare e disattivare a metà del flusso.
Il trucco con tikz
sembra essere quello di mettere solo il testo nel gruppo di trasparenza:
documentclass{article}
usepackage{l3pdf}
ExplSyntaxOn
pdf_uncompress:
ExplSyntaxOff
usepackage{fontspec}
usepackage{tikz}
newfontfamily{devanagari}{Noto Sans Devanagari}[Script=Devanagari, Scale=1, Renderer=HarfBuzz]
begin{document}
begin{tikzpicture}[opacity=0.5]
fill[cyan] (0,0) circle [radius=10pt];
begin{scope}[transparency group]
node[text=red, font=devanagari] {एक गांव में पिताजी};
end{scope}
end{tikzpicture}
end{document}
Ecco un esempio più completo, che mostra come inserire un paio di paragrafi di colori diversi in un gruppo di trasparenza. Consente inoltre di specificare la modalità di fusione. Tuttavia, qualsiasi grafica di sfondo deve trovarsi nel gruppo di fusione. Questa non è una limitazione se si vuole solo la trasparenza.
documentclass{article}
usepackage{l3pdf}
ExplSyntaxOn
pdf_uncompress:
ExplSyntaxOff
usepackage{fontspec}
usepackage{tikz}
usepackage{lipsum}
newfontfamily{devanagari}{Noto Sans Devanagari}[Script=Devanagari, Scale=1, Renderer=HarfBuzz]
newcommand*{tgopacity}{0.5}
newcommand*{tgblendmode}{normal}
newcommand*{tggraphics}{}
% begin{transparentgroup}{opacity}{blend mode}{graphics within blend group}
newenvironment{transparentgroup}[3]{%
renewcommand*{tgopacity}{#1}%
renewcommand*{tgblendmode}{#2}%
renewcommand{tggraphics}{#3}%
setbox0=vboxbgroup
}{%
egroup
noindentbegin{tikzpicture}[
inner sep=0pt, outer sep=0pt, blend group=tgblendmode
]
tggraphics
pgfresetboundingbox
begin{scope}[transparency group, opacity=tgopacity]
node [anchor=north west] {box0};
end{scope}
end{tikzpicture}}
begin{document}
noindenttikz[remember picture, overlay] fill[green, opacity=0.5]
([yshift=7cm]current page.center) circle [radius=20pt];%
begin{transparentgroup}{0.5}{lighten}{
fill[green, opacity=0.5] (10mm,-5mm) circle [radius=20pt];
}
textcolor{red}{devanagari एक गांव में पिताजी}
lipsum[1]
end{transparentgroup}
textcolor{red}{devanagari एक गांव में पिताजी}
lipsum[1]
end{document}
È possibile fare ciò che si vuole, ma è piuttosto complicato. L'esempio seguente presenta un'interfaccia semplice per impostare il materiale in un elemento vbox
e consente di impostare l'opacità e la modalità di fusione.
L'utilizzo è:
begin{transparencygroup}[
opacity = < Value between 0 and 1 >,
blend mode = < One of the standard PDF blend modes >
]
end{transparencygroup}
A causa della scarsa interfaccia per le risorse di pagina, possono verificarsi problemi con
altri pacchetti che aggiungono elementi alle risorse di pagina.
Questo codice di esempio non fa alcun tentativo di lavorare con altri pacchetti, quindi è potrebbe non funzionare correttamente se sono stati caricati altri pacchetti che hanno problemi con /ExtGState
(ad esempio, tikz
, colorspace
, transparent
, fontspec
, la funzione Opacità, ecc.) tikz
fornisce un aggancio che può essere utilizzato se si ha bisogno di usare tikz
.
%! TeX Program = lualatex
documentclass{article}
pagestyle{empty}
% grouped transparency implementation
% Limitations:
%
% 1. Because of the poor interface for page resources, there can be problems
% with other packages that add things to the /ExtGState dictionary (e.g.,
% tikz, colorspace, transparent, etc.).
%
% 2. You can't use the Opacity feature of fontspec as this puts the
% transparency code inside the transparency group, and you'll still get the
% overlapping glyphs.
%
% 3. Only LuaLaTeX is supported.
usepackage{l3pdf}
usepackage{xparse}
usepackage{everyshi}
ExplSyntaxOn
pdf_uncompress:
% l3pdf extensions (lualatex only)
cs_generate_variant:Nn pdf_object_new:nn { xn }
cs_generate_variant:Nn pdf_object_write:nn { xx }
cs_generate_variant:Nn pdf_object_ref:n { e }
cs_new_protected:Nn __reportaman_pdf_xform_now:Nnn
{
tex_immediate:D tex_pdfxform:D
attr { #2 }
resources { #3 }
#1
}
cs_generate_variant:Nn __reportaman_pdf_xform_now:Nnn { Nxx }
cs_new_protected:Nx __reportaman_pdf_xform_last:
{
exp_not:N int_value:w
exp_not:N tex_pdflastxform:D
c_space_tl 0 ~ R
}
cs_new_protected:Nn __reportaman_pdf_refxform_last:
{
tex_pdfrefxform:D tex_pdflastxform:D
}
cs_new_protected:Nn __reportaman_pdf_pageresources_gput_right:nn
{
tex_global:D
tex_pdfvariable:D pageresources
exp_after:wN
{
tex_the:D tex_pdfvariable:D pageresources / #1 ~ #2
}
}
cs_generate_variant:Nn __reportaman_pdf_pageresources_gput_right:nn { nx }
cs_new_protected:Nn __reportaman_pdf_literal_direct:n
{
tex_pdfextension:D literal direct
{
#1
}
}
cs_generate_variant:Nn __reportaman_pdf_literal_direct:n { x }
cs_new_protected:Nn __reportaman_pdf_save_gs:
{
__reportaman_pdf_literal_direct:n { q }
}
cs_new_protected:Nn __reportaman_pdf_restore_gs:
{
__reportaman_pdf_literal_direct:n { Q }
}
% grouped transparency back end
clist_new:N g__reportaman_ca_clist
clist_new:N g__reportaman_bm_clist
int_new:N g__reportaman_extgstate_int
cs_new_protected:Nn __reportaman_set_pdf_page_resources:
{
clist_remove_duplicates:N g__reportaman_ca_clist
clist_remove_duplicates:N g__reportaman_bm_clist
tl_clear:N l_tmpa_tl
clist_map_inline:Nn g__reportaman_ca_clist
{
tl_put_right:Nn l_tmpa_tl
{
/reportaman_CA_##1 ~ << ~ /CA ~ ##1 ~ >> ~
/reportaman_ca_##1 ~ << ~ /ca ~ ##1 ~ >> ~
}
}
clist_map_inline:Nn g__reportaman_bm_clist
{
tl_put_right:Nn l_tmpa_tl
{
/reportaman_bm_##1 ~ << ~ /BM ~ [ ~ /##1 ~ ] ~ >> ~
}
}
clist_gclear:N g__reportaman_ca_clist
clist_gclear:N g__reportaman_bm_clist
exp_args:Nx pdf_object_if_exist:nT
{
reportaman_extgstate_ int_use:N g__reportaman_extgstate_int
}
{
pdf_object_write:xx
{ reportaman_extgstate_ int_use:N g__reportaman_extgstate_int }
{ l_tmpa_tl }
__reportaman_pdf_pageresources_gput_right:nx
{ ExtGState }
{
pdf_object_ref:e
{
reportaman_extgstate_ int_use:N g__reportaman_extgstate_int
}
}
int_gincr:N g__reportaman_extgstate_int
}
}
EveryShipout { __reportaman_set_pdf_page_resources: }
keys_define:nn { reportaman }
{
opacity .tl_set:N = l__reportaman_opacity_tl,
opacity .value_required:n = true,
blend ~ mode .choice:,
blend ~ mode .choices:nn =
{ Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge,
ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation,
Color, Luminosity }
{ tl_set_eq:NN l__reportaman_blend_mode_tl l_keys_choice_tl },
blend ~ mode .value_required:n = true,
}
% grouped transparency front end
% begin{transparencygroup}[
% opacity = < Value between 0 and 1 >,
% blend mode = < One of the standard PDF blend modes >
% ]
% end{transparencygroup}
NewDocumentEnvironment { transparentgroup }
{ o +b }
{
keys_set:nn { reportaman }
{
opacity = { 1 },
blend ~ mode = { Normal }
}
IfValueT { #1 }
{
keys_set:nn { reportaman } { #1 }
}
clist_gput_right:Nx g__reportaman_ca_clist { l__reportaman_opacity_tl }
clist_gput_right:Nx g__reportaman_bm_clist { l__reportaman_blend_mode_tl }
vbox_set:Nn l_tmpa_box
{
__reportaman_pdf_literal_direct:x
{
/reportaman_bm_l__reportaman_blend_mode_tl c_space_tl gs
}
#2
}
exp_args:Nx pdf_object_if_exist:nF
{
reportaman_extgstate_ int_use:N g__reportaman_extgstate_int
}
{
pdf_object_new:xn
{ reportaman_extgstate_ int_use:N g__reportaman_extgstate_int }
{ dict }
}
__reportaman_pdf_xform_now:Nxx
l_tmpa_box
{ /Group ~ << ~ /S ~ /Transparency ~ /I ~ true ~ /K ~ false ~ >> }
{ /ExtGState ~
pdf_object_ref:e
{
reportaman_extgstate_ int_use:N g__reportaman_extgstate_int
}
}
__reportaman_pdf_save_gs:
__reportaman_pdf_literal_direct:x
{
/reportaman_CA_l__reportaman_opacity_tl c_space_tl gs iow_newline:
/reportaman_ca_l__reportaman_opacity_tl c_space_tl gs
}
__reportaman_pdf_refxform_last:
__reportaman_pdf_restore_gs:
}
{
}
ExplSyntaxOff
% Usage example
usepackage{xcolor}
usepackage{fontspec}
newfontfamily{devanagari}{Noto Sans Devanagari}[Script=Devanagari, Scale=1, Renderer=HarfBuzz]
begin{document}
begin{transparentgroup}[opacity=0.25, blend mode=Hue]
devanagariHuge
color{red}एक गांव में पिताजी
vspace{-7mm}quad
color{green}एक गांव में पिताजी
end{transparentgroup}
begin{transparentgroup}[opacity=0.5]
devanagariHuge
color{red}एक गांव में पिताजी
vspace{-7mm}quad
color{blue}एक गांव में पिताजी
end{transparentgroup}
begin{transparentgroup}
devanagariHuge
color{red}एक गांव में पिताजी
vspace{-7mm}quad
color{yellow}एक गांव में पिताजी
end{transparentgroup}
end{document}
Se il nostro post ti è stato utile, sarebbe molto utile se lo condividessi con altri sviluppatori in questo modo per aiutare a diffondere le nostre informazioni.