在 toggleocgs 参数中使用扩展

在 toggleocgs 参数中使用扩展

我想用ocg-p它定义一个step具有可选内容组(OCG/“层”)的环境,其中边缘有一个“+”字符,可让您切换该组。

我给\stepi每个图层赋予一个唯一的名称。

但是,\toggleocgs似乎没有扩展其参数{step\stepi},因此下面的方法不起作用(单击“+”边注没有任何作用)。使用ocgx包和\switchocgs而不是ocg-p\toggleocgs确实有效,但我需要ocg-pXeLaTeX 支持。

我猜我需要一些\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内部链接(linkbordercolorlinkcolorpdfborderpdfborderstyle)的设置进行样式设置。为了局部抑制样式设置(但保持链接功能),\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}

相关内容