![需要宏来忽略特定的偶数输入](https://linux22.com/image/231398/%E9%9C%80%E8%A6%81%E5%AE%8F%E6%9D%A5%E5%BF%BD%E7%95%A5%E7%89%B9%E5%AE%9A%E7%9A%84%E5%81%B6%E6%95%B0%E8%BE%93%E5%85%A5.png)
我的文档由(除其他外)如下所示的块组成:
\begin{Solution}{6.7.8,1.2.3}
...
\end{Solution}
或者
\begin{Solution}{,1.2.3}
...
\end{Solution}
我想定义解决方案环境,以便在设置开关时,块的内容按原样包含(当然,使用 LaTeX 处理),或者如果最后一位数字(上面的“3”)是偶数,则完全省略。此外,如果插入了文本,则应在上面的示例中用完整字符串(“1.2.3”)标记。我对 TeX 了解不够多,甚至不知道从哪里开始。有人愿意帮忙吗?
答案1
您的问题的解决方案可能涉及三个较小的子问题:
- 扫描输入参数以找到最后一个数字。
- 测试一个数字是否为偶数。
- 让 (La)TeX 忽略一段代码。
对于第一个,你可能需要一些 TeX 技巧,也许是像这样
\def\scan#1.#2.{\ifx#2\relax\def\next{#1}\else\def\next{\scan #2.}\fi\next}
\newcommand{\lastnumber}[1]{\scan#1.\relax.}
对于第二项任务,该ifthen
包提供了一个\iffodd
可能有用的功能。
对于最后一项和第三项任务,看一下verbatim
包,其中除其他外,定义了一个comment
忽略 LaTeX 代码块的环境。
答案2
至于 Juan 提到的第 3 个子问题:让 (La)TeX 忽略一段代码。
让 TeX 忽略代码块并不难,但以某种方式让它执行可能会更难。我猜实现它的一种方法可能是提前扫描到 \end{Solution} 指令并将沿途遇到的所有标记放入宏中,该宏稍后可以选择扩展。不过我怀疑这不是一件很容易的事情。