我正在使用多受众包 - 效果很好。以下是一个例子
\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}