我正在尝试检查某个部分编号是否属于指定列表:
\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}