一次获取多个受众的结果

一次获取多个受众的结果

我以前使用多受众包时没有遇到任何问题。但现在我有一个包含多个受众的文档,我需要同时获取两个受众的结果。我有 5 个受众,分为两类,略有不同。一种是“a,b,c”类型,另一种是“x,y”类型。我的目的是将值“a,x”定义为当前受众,并获取“a”和“x”受众的结果。

我知道我可以通过所有可能的组合来定义受众,就像这样:

\SetNewAudience{ax}
\SetNewAudience{ay}
\SetNewAudience{bx}
\SetNewAudience{by}
\SetNewAudience{cx}
\SetNewAudience{cy}

但我不想这样做,我更愿意将观众定义为正常人,并得到其中两个人的结果。

这是我所能找到的代码。我重新定义了命令 \SetNewAudience,但它不起作用。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{multiaudience}
\usepackage{xkvview}
\usepackage{xparse}

%Command provided by user31729 from: https://tex.stackexchange.com/questions/287084/membership-check-on-comma-separated-list/287085?r=SearchResults#287085
\ExplSyntaxOn
\NewDocumentCommand{\IsMember}{mm+m+m}{%
\clist_set:Nx \l_tmpa_clist {#1}
\clist_if_in:NnTF \l_tmpa_clist {#2} {#3} {#4}
}
\ExplSyntaxOff

\makeatletter
\def\showWhenAppropriate{%
  \if@MULTAU@include%
    \@MULTAU@showntrue%
  \else%
    \@MULTAU@shownfalse%
  \fi%
}
\def\SetNewAudience#1{%
  \define@key{MULTAU}{#1}[]{%
    \def\@MULTAU@currkey{#1}%
    \IsMember{\CurrentAudience}{\@MULTAU@currkey}{\showWhenAppropriate}{\relax}
  }%
}
\makeatother

\DefCurrentAudience{a,x}

\SetNewAudience{a}
\SetNewAudience{b}
\SetNewAudience{c}
\SetNewAudience{x}
\SetNewAudience{y}

\begin{document}

Current audience: \CurrentAudience % for testing

\xkvview{} % for testing

\showto{a}{a}

\showto{b}{b}

\showto{c}{c}

\showto{x}{x}

\showto{y}{y}

\showto{a,x}{ax}

\showto{-,a,x}{bcy}

\end{document}

提前致谢。

答案1

我为 CTAN 提交了一个新版本,解决了这个问题。

这是新代码。如果您的版本是 1.05(即将在 CTAN 上发布)或更新版本,则无需使用此代码:

\def\SetNewAudience#1{%
  \define@key{MULTAU}{#1}[]{%
    \def\@MULTAU@currkey{#1}%
    \@for\@tempa:=\CurrentAudience \do{%
      \ifx\@MULTAU@currkey\@tempa\relax
        \if@MULTAU@include
           \@MULTAU@showntrue
        \else
           \@MULTAU@shownfalse
        \fi%
    \fi%
}}}

例如:( \DefCurrentAudience{ax,ay,az}请注意观众之间没有空格)。

答案2

我刚刚遇到了同样的问题,不幸的是,多受众包似乎无法做到这一点。

我改用可选包:

\documentclass{minimal}

\usepackage[foo,bar]{optional}

\begin{document}

\opt{foo}{foo}

\opt{bar}{bar}

\opt{foo,bar}{foobar}

\end{document}

相关内容