我想生成一个带图层的 ps 文件。ocg.sty 不支持 ps,所以我想自己写一个简单的例子看看是否可行。我从中获取了一个 pdf 版本这里并尝试改变命令来生成 ps 版本(代码附加在此处)。
嗯,ps 文件生成了,但似乎已损坏。当我使用 ps2pdf 时,会报告错误。如果删除带有“AddToShipoutPicture”的部分,ps2pdf 不会报告任何错误,因此似乎错误就在那里。但也许还有更多错误。也许有人可以帮助制定一个简单的解决方案。
\documentclass{article}
\RequirePackage{eso-pic}
\RequirePackage{ifpdf}
\newcommand{\setupOCG}{
\special{ps: mark /_objdef {@ocg1} /type/dict /OBJ pdfmark}
\special{ps: mark {@ocg1} <</Type/OCG /Name (My first layer)>> /PUT pdfmark}
\special{ps: mark /_objdef {@ocg2} /type/dict /OBJ pdfmark}
\special{ps: mark {@ocg2} <</Type/OCG /Name (My second layer)>> /PUT pdfmark}
%register it and configure its default behaviour
%\special{ps: mark /_objdef {{@ocg1} {@ocg2}} /type/array /OBJ pdfmark}
\special{ps:mark {Catalog} <<
/OCProperties <<
/OCGs [{@ocg1} {@ocg2}]
/D <</BaseState/ON /Order [{@ocg1} {@ocg2}] /OFF [{@ocg1}] >> %first layer invisible
>>
>> /PUT pdfmark}
%add the OCG to the resources of the current page object
\AddToShipoutPicture{%
\special{ps:mark {Resources} <<
/Properties <<
%this maps the name to the OCG object
/oc1 {@ocg1} /oc2 {@ocg2}
>>
>> /PUT pdfmark}
}
}
\newcommand{\myocg}[2]{%
\special{ps: mark /OC /#1 /BDC pdfmark}#2\special{ps: mark /EMC pdfmark}% ok
%\special{ps: mark {ocgname\the\ocnum} <</OC {/@oc\the\ocnum}>> /PUT pdfmark}
}
\setupOCG
\begin{document}
\myocg{oc1}{I am NOT visible on the first layer.}
\myocg{oc2}{I am visible on the second layer.}
\end{document}
答案1
第二次更新
包裹ocgx2
, 和Ghostscript发布>=9.15允许使用latex
+ dvips
+创建 PDF 层 (OCG) ps2pdf
。
\documentclass{article}
\usepackage{ocgx2}
\begin{document}
\switchocg{a b}{\fbox{Swap visibility}}\\[1ex]
\begin{ocg}{A}{a}{1}
Some text, initially visible.
\end{ocg}
\begin{ocg}{B}{b}{0}
Some text, initially \emph{in}visible.
\end{ocg}
\begin{ocg}{A}{a}{0} %initial visibility of re-opened OCG cannot be changed
Some more text, initially visible.
\end{ocg}
\end{document}
第一次更新(过时的)
封装组合以及最近Ghostscript发布9.15允许使用ocgx
+fixocgx
latex
+ dvips
+创建 PDF 层 (OCG) ps2pdf
。
\documentclass{article}
\usepackage{ocgx}
\usepackage{fixocgx}[2015/01/26]
\begin{document}
\switchocg{a b}{\fbox{Swap visibility}}\\[1ex]
\begin{ocg}{A}{a}{1}
Some text, initially visible.
\end{ocg}
\begin{ocg}{B}{b}{0}
Some text, initially \emph{in}visible.
\end{ocg}
\begin{ocg}{A}{a}{0} %initial visibility of re-opened OCG cannot be changed
Some more text, initially visible.
\end{ocg}
\end{document}
为了使用 OCG(可选内容组)在 PDF 中创建图层,页面流中要设为可选的内容必须括在/OC ... BDC
-EMC
括号中。
不幸的是,用于此目的的/BDC
和/EMC
pdfmarks 不受 Ghostscript 的支持ps2pdf
(根据gdevpdfm.c
Ghostscript 来源)。
目前,只有 Adobe Distiller 支持它们。
从 Ghostscript 开始9.15、 pdfmarks/BDC
以及/EMC
OCG 均得到全面支持。
原始帖子中使用低级的更正后的代码示例pdfmark
latex
通过-> dvips
->或 Distiller运行的实施内容ps2pdf
如下:
\documentclass{article}
\newcommand{\setupOCG}{
\special{ps: mark /_objdef {ocg1} /type/dict /OBJ pdfmark}
\special{ps: mark {ocg1} <</Type/OCG /Name (My first layer)>> /PUT pdfmark}
\special{ps: mark /_objdef {ocg2} /type/dict /OBJ pdfmark}
\special{ps: mark {ocg2} <</Type/OCG /Name (My second layer)>> /PUT pdfmark}
%register it and configure its default behaviour
\special{ps:mark {Catalog} <<
/OCProperties <<
/OCGs [{ocg1} {ocg2}]
/D <</BaseState/ON /Order [{ocg1} {ocg2}] /OFF [{ocg1}] >> %first layer invisible
>>
>> /PUT pdfmark}
}
\newcommand{\myocg}[2]{%
\special{ps: mark /OC {#1} /BDC pdfmark}#2\special{ps: mark /EMC pdfmark}%
}
\setupOCG
\begin{document}
\myocg{ocg1}{I am NOT visible on the first layer.}
\myocg{ocg2}{I am visible on the second layer.}
\end{document}