尝试改变多观众环境

尝试改变多观众环境

我正在使用多受众包 - 效果很好。以下是一个例子

\usepackage{multiaudience}
\SetNewAudience{internGER}
\SetNewAudience{externGER}
\DefCurrentAudience{internGER}
...
\begin{shownto}{internGER, externGER}
text for everyone
\begin{shownto}{internGER}
text for internals only
\end{shownto}
\end{shownto}


现在我想创建一个额外的选项,允许我“标记”(用红色或下划线等标记)内部文本。这将使文本审批变得更容易,因为您不必检查两个文档,而只需检查一个文档。

所以我尝试重新创建showto环境

  \let\oldshownto\shownto
  \let\endoldshownto\endshownto
  \renewenvironment{shownto}[1][]{%
  THIS TEXT WILL BE VISIBLE TO #1 :\\
 \oldshownto
  }{ %
  END OF VISIBLE TEXT\\
  \endoldshownto
  }

我的计划是根据参数 #1 使用一些“if-magic”,但不幸的是,参数 #1 中没有内容。这有什么问题?

这是完整的最小示例 - 它的编译

\documentclass{article}


\usepackage{multiaudience}
\SetNewAudience{internGER}
\SetNewAudience{externGER}
\DefCurrentAudience{internGER}
%\DefCurrentAudience{externGER}

\let\oldshownto\shownto
\let\endoldshownto\endshownto
\renewenvironment{shownto}[1][]{%
-THIS TEXT WILL BE VISIBLE TO #1-, 
\oldshownto
}{ %
-END-\\
\endoldshownto
}

\begin{document}
\begin{shownto}{internGER, externGER}
text for everyone.


\begin{shownto}{internGER}
text for internals only
\end{shownto}
\end{shownto}
\end{document}

谢谢乔治

答案1

您正在定义环境以采取选修的参数,默认情况下为空,但你想 (1) 环境采取强制的参数,以及(2)将该参数传递给原始环境。

但是,环境是由(以一种让我认为作者有点误解了它的用法......){shownto}定义的,所以我采取了不同的方法:\NewEnviron

\documentclass{article}

\usepackage{multiaudience}
\SetNewAudience{internGER}
\SetNewAudience{externGER}
\DefCurrentAudience{internGER}
%\DefCurrentAudience{externGER}

% original definition
%\NewEnviron{shownto}[1]{%
%  \@MULTAU@shownfalse\@MULTAU@includetrue
%  \setkeys{MULTAU}{#1}%
%  \if@MULTAU@shown\BODY\fi}
\makeatletter
\RenewEnviron{shownto}[1]{%
   \@MULTAU@shownfalse\@MULTAU@includetrue
   \setkeys{MULTAU}{#1}%
   \if@MULTAU@shown
   [START TEXT SHOWN TO #1]%
   \BODY
   [END]%
   \fi
}
\makeatother

\begin{document}
\begin{shownto}{internGER, externGER}
text for everyone.


\begin{shownto}{internGER}
text for internals only
\end{shownto}
\end{shownto}
\end{document}

在此处输入图片描述

相关内容