我目前有一个tex.snippets文件来保存片段,这使得在LaTeX中编写作业变得更容易。例如,我有一个代码片段' 2问题'形式:
snippet 2problem
\begin{homeworkProblem}
\begin{enumerate}
\item[] $1
$2
\item[] $3
$4
\end{enumerate}
\end{homeworkProblem}
endsnippet
这为我提供了一个简单的方法来解决两部分问题。但是,有没有办法制作一个输出n部分问题的片段?现在我有单独的片段来解决单独的问题,这是非常繁琐的。
答案 0 :(得分:0)
我知道,这不是一个ultisnip解决方案,以防万一:mu-template支持循环和recursion的摘要。我是如何在C和C ++中生成switch-case construct from an enum definition的。定义它有点麻烦,但效果很好。
答案 1 :(得分:0)
使用片段定义为:
post_jump "dynamicsnippet(snip)"
snippet '(\d+)problem' rb
\begin{homeworkProblem}
\begin{enumerate}
`!p snip.rv=create_partprob(int(match.group(1)))`
\end{enumerate}
\end{homeworkProblem}
endsnippet
将这段代码附加到所需片段文件的末尾。(可能类似于 tex.snippets)
global !p
def dynamicsnippet(snip):
# Create anonymous snippet body
anon_snippet_body = ""
# Get start and end line number of expanded snippet
start = snip.snippet_start[0]
end = snip.snippet_end[0]
# Append current line into anonymous snippet
for i in range(start, end + 1):
anon_snippet_body += snip.buffer[i]
anon_snippet_body += "" if i == end else "\n"
# Delete expanded snippet line till second to last line
for i in range(start, end):
del snip.buffer[start]
# Empty last expanded snippet line while preserving the line
snip.buffer[start] = ''
# Expand anonymous snippet
snip.expand_anon(anon_snippet_body)
def create_partprob(n):
out=""
placeholder=1
for _ in range(0,n):
out+=24*" "+"\\item[] $"+f"{placeholder}\\\\\\\\\n"
placeholder+=1
out+=24*" "+" $"+f"{placeholder}\\\\\\\\\n"
placeholder+=1
out=out[:-1]
return out
endglobal
它适用于我的编辑器和 Ultisnips,希望它也适用于您的编辑器。 祝你好运!
编辑:使用专门为 vim 和 vi 相关问题制作的堆栈来解决此类问题。您可以找到网站 here。