![在 toggleocgs 参数中使用扩展](https://linux22.com/image/444248/%E5%9C%A8%20toggleocgs%20%E5%8F%82%E6%95%B0%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%89%A9%E5%B1%95.png)
我想用ocg-p
它定义一个step
具有可选内容组(OCG/“层”)的环境,其中边缘有一个“+”字符,可让您切换该组。
我给\stepi
每个图层赋予一个唯一的名称。
但是,\toggleocgs
似乎没有扩展其参数{step\stepi}
,因此下面的方法不起作用(单击“+”边注没有任何作用)。使用ocgx
包和\switchocgs
而不是ocg-p
它\toggleocgs
确实有效,但我需要ocg-p
XeLaTeX 支持。
我猜我需要一些\expandafter
魔法来确保它{step\stepi}
能够扩展前 \toggleocgs
,但即使阅读了这里几个问答之后,仍然不知道如何使用该宏。
我该如何修复以下问题以便“+”正确切换图层?
\documentclass{article}
\usepackage{ocg-p}
\usepackage{marginnote}
\reversemarginpar
\newcommand\stepi{1}
\newenvironment{step}
{\marginnote{\toggleocgs{step\stepi}{+}}
\begin{ocg}{Step \stepi}{step\stepi}{0}}
{\end{ocg}
\xdef\stepi{\the\numexpr\stepi+1\relax}}
\usepackage{lipsum}
\begin{document}
\begin{step}
\lipsum[1-3]
\end{step}
\end{document}
负责解析参数的代码\toggleocgs
如下:
\def\@ocgp@parseSpaceSeperatedList#1{\@ocgp@doparseSpaceSeperatedList#1 \relax}
\def\@ocgp@doparseSpaceSeperatedList#1 #2{%
\ifcsname OCGpdfobj#1\endcsname%
\xdef\@ocgp@ocgobjlist{\@ocgp@ocgobjlist\space\csname OCGpdfobj#1\endcsname}%
\fi
\ifx#2\relax
%\@ocgp@ocgobjlist % only for debugging reasons
\else
\expandafter\@ocgp@doparseSpaceSeperatedList
\fi
#2%
}
ocgx
中的版本\switchocgs
略有不同:
\csname ocgx@end:ENDOFOCGS\endcsname
\def\ocgx@listOCG#1 {%
\unless\ifcsname ocgx@end:#1\endcsname
\ifcsname OCGpdfobj#1\endcsname
\expandafter\def\expandafter\ocgx@list\expandafter{%
\ocgx@list
\csname OCGpdfobj#1\endcsname\space}%
\fi%
\expandafter\ocgx@listOCG
\fi
}
但我真的不明白这里发生了什么。
答案1
包装ocg-p
有点旧了。ocgx2
可以使用包装来替代。
\documentclass{article}
\usepackage{ocgx2}
\usepackage{marginnote}
\reversemarginpar
\newcommand\stepi{1}
\newenvironment{step}
%{\marginnote{\toggleocgs{step\stepi}{+}} % also works as ocg-p commands are supported
{\marginnote{\switchocg{step\stepi}{+}}
\begin{ocg}{Step \stepi}{step\stepi}{0}}
{\end{ocg}
\xdef\stepi{\the\numexpr\stepi+1\relax}}
\usepackage{lipsum}
\begin{document}
\begin{step}
\lipsum[1-3]
\end{step}
\end{document}
请注意,如果hyperref
已加载,则通过 进行的图层切换链接ocgx2
将根据hyperref
内部链接(linkbordercolor
、linkcolor
、pdfborder
、pdfborderstyle
)的设置进行样式设置。为了局部抑制样式设置(但保持链接功能),\hypersetup{hidelinks}
可以像 一样使用\marginnote{\hypersetup{hidelinks}\switchocg{step\stepi}{+}}
。
这是一个增强版本,其中“-“ 替换 ”+当图层变得可见时,在边缘处。
\documentclass{article}
\usepackage{hyperref}
\usepackage{ocgx2}
\usepackage{marginnote}
\reversemarginpar
\newcommand\stepi{1}
\newenvironment{step}{%
\marginnote{%
\hypersetup{hidelinks}%
\switchocg{step\stepi}{%
\begin{ocmd}{\Not{step\stepi}}\makebox[0pt][l]{$+$}\end{ocmd}%
\begin{ocmd}{\AnyOn{step\stepi}}$-$\end{ocmd}%
}%
}%
\begin{ocg}{Step \stepi}{step\stepi}{off}%
}{%
\end{ocg}%
\xdef\stepi{\the\numexpr\stepi+1\relax}%
}
\usepackage{lipsum}
\begin{document}
\begin{step}
\lipsum[1-3]
\end{step}
\end{document}