我严重依赖 ExPex,在自动标记多部分示例的子部分时遇到问题:
Consider the following construction:
\pex<like>
\a[label=0] I like X
\xe
Some folks might say something like:
\pex[exno=\getref{like}]
\a I like food
\a I like pens
\xe
Observe the similarity to the construction:
\pex<wantz>
\a[label=0] Me wantz X
\a Me wantz food
\a Me wantz pens
\xe
But there’s more!
\pex[exno=\getref{like}]
\a I like LaTeX
\a I like ExPex
\xe
我得到了左侧的结果但想要右侧的结果:
换句话说,我希望给定多部分示例的子部分数量不断增加。我可以每次都使用 \a[label=] 并自行跟踪,但这似乎很乏味且不可靠。
我怀疑有某种方法可以使用 \pexcnt 来实现这个效果,但是即使读了手册几次,我仍然不知道该怎么做。
答案1
我想到的是这些想法:
创建一个命令
\saveseries{<name>}
其中<name>
定义了宏(因此它的语法应该是宏,即只有字母)以保存当前\pexcnt
以供以后使用。这命令应放在结构的末尾\pex
(之前\xe
)。创建一个命令
\resumeseries{<name>}
用于继续其他的标签\pex
。此命令必须放在其他\pex
结构的开头(您希望继续标记的位置),并且不要忘记放置nopreamble
避免换行的选项。
警告
\saveseries{...}
如果要打破其他块中的标签,则必须重新放置。- 您必须使用已经定义的
<name>
in来避免类似以下错误\resumeseries
\saveseries
`! Undefined control sequence.` `<recently read> \<name>`
完整代码
\documentclass{article}
\usepackage{expex}
\newcommand{\saveseries}[1]{\expandafter\xdef\csname #1\endcsname{\noexpand\pexcnt\the\pexcnt\relax}}
\newcommand{\resumeseries}[1]{\expandafter\csname#1\endcsname\ignorespaces}
\begin{document}
Consider the following construction:
\pex<like>
\a[label=0] I like X
\xe
Some folks might say something like:
\pex[exno=\getref{like}]
\a I like food
\a I like pens
\a I don't know
\saveseries{myserie}
\xe
Observe the similarity to the construction:
\pex<wantz>
\a[label=0] Me wantz X
\a Me wantz food
\a Me wantz pens
\xe
But there’s more!
\pex[exno=\getref{like},nopreamble] \resumeseries{myserie}
\a I like LaTeX
\a I like ExPex
\xe
\end{document}
虽然这还没有经过充分的测试但我认为已经获得了预期的结果。