检查数字是否在逗号分隔的列表中(打印或显示特定列表中选定的部分)

检查数字是否在逗号分隔的列表中(打印或显示特定列表中选定的部分)

我正在尝试检查某个部分编号是否属于指定列表:

    \ifnum\value{section}=\mylist % check if section number in mylist --- WRONG
        \dosomething
    \fi

这个条件显然是错误的,因为将数字与列表进行比较是没有意义的。我的感觉是必须有一个快速修复(尽管我的 TeX 知识非常有限)。请帮忙!


附言:这是我的问题更完整的版本:

我正在尝试创建一个可以仅打印选定部分的环境。我希望在文档开头指定要打印的部分的逗号分隔列表,然后仅打印选定的部分。例如,

    \keepsections{1,5,8}
    \mysection{section 1}{content}
    \mysection{section 2}{content}
    \mysection{section 3}{content}
    \mysection{section 4}{content}
    \mysection{section 5}{content}
    \mysection{section 6}{content}
    \mysection{section 7}{content}
    \mysection{section 8}{content}

应该给我们:

输出

这是我尝试过的:

    \documentclass{article}

    \newcommand{\keepsections}[1]{ \newcommand{\mylist}{#1} }
    \usepackage{environ}% http://ctan.org/pkg/environ
    \NewEnviron{customsection}{ % new environment
        \stepcounter{section} % environ should use the section counter
        \ifcustomsec % if want to print only select sections from a list
            \ifnum\value{section}=\mylist\relax % check if section in list --- WRONG
                \addtocounter{section}{-1} % use correct counter and print
                \BODY
            \fi
        \else % if want to print all sections,
            \addtocounter{section}{-1} % use correct counter and print
            \BODY
        \fi%
    }
    \newcommand{\mys}[1]{\begin{customsection}#1\end{customsection}}
    \newcommand{\mysection}[2]{\mys{\section{#1}#2}} % to conform to usage above

    \newif\ifcustomsec % Boolean to print only selected sections
    \customsectrue % Bool=True: Tell TeX to print only from the custom list
    \keepsections{1,5,8} % Print only sections 1 and 3

    \begin{document}

    \mysection{section 1}{content}
    \mysection{section 2}{content}
    \mysection{section 3}{content}
    \mysection{section 4}{content}
    \mysection{section 5}{content}
    \mysection{section 6}{content}
    \mysection{section 7}{content}
    \mysection{section 8}{content}

    \end{document}

尽管它因为上面指出的错误逻辑而失败了。

这个问题 - 创建奇数答案或所有答案—— 有一个非常好的解决方案,可以只打印偶数或奇数部分,效果非常好,这就是我的想法的来源。

这个问题 - 测试数字是否在逗号分隔的范围/数字列表中——讨论定义此类命令

    \ifinrange{<num>}{<range>}{<TRUE>}{<FALSE>}% num>=0

如果我能更换就好了

    \ifnum\value{section}=\mylist\relax%

部分

    \ifinrange{\value{section}}{\mylist}{...}{...}

但由于我的知识有限,我未能在这种情况下实现它。

非常感谢您的帮助。非常感谢。

答案1

使用新工具循环遍历以逗号分隔的章节编号列表:

\documentclass{article}
\usepackage{xinttools}

\newcommand{\keepsections}[1]{\newcommand{\mylist}{#1}}

\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{customsection}{% new environment
    \stepcounter{section}% environ should use the section counter
    \ifcustomsec % if want to print only select sections from a list
        \xintFor ##1 in \mylist \do
        {\ifnum\value{section}=##1\relax % check if section in list
            \addtocounter{section}{-1}% use correct counter and print
            \BODY
            \expandafter\xintBreakFor % no need to check farther in the list
        \fi}%
    \else % if want to print all sections,
        \addtocounter{section}{-1}% use correct counter and print
        \BODY
    \fi%
}
\newcommand{\mys}[1]{\begin{customsection}#1\end{customsection}}
\newcommand{\mysection}[2]{\mys{\section{#1}#2}}% to conform to usage above

\newif\ifcustomsec % Boolean to print only selected sections
\customsectrue % Bool=True: Tell TeX to print only from the custom list
\keepsections{1,5,8}% Print only sections 1, 5 and 8

\begin{document}
\mysection{section 1}{content}
\mysection{section 2}{content}
\mysection{section 3}{content}
\mysection{section 4}{content}
\mysection{section 5}{content}
\mysection{section 6}{content}
\mysection{section 7}{content}
\mysection{section 8}{content}
\end{document}

选定部分

相关内容