2

現在、LaTeX での宿題の作成を容易にするスニペットを保持する tex.snippets ファイルがあります。たとえば、次の形式のスニペット '2problem' があります。

snippet 2problem
    \begin{homeworkProblem}
        \begin{enumerate}
            \item[] $1
                $2
            \item[] $3
                $4
        \end{enumerate}
    \end{homeworkProblem}
endsnippet

これにより、2 部構成の問題を簡単に始めることができます。ただし、n パートの問題を出力するスニペットを作成する方法はありますか? 現在、問題数ごとにスニペットを分けていますが、これは非常に面倒です。

4

2 に答える 2

0

念のため、これは究極の解決策ではないことを知っています。mu -templateは、スニペットでのループと再帰をサポートしています。C および C++ でenum 定義から switch-case コンストラクトを生成する方法です。定義するのは少し面倒ですが、うまく機能します。

于 2015-01-27T10:59:41.137 に答える
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関連の質問用に特別に作成されたスタックを使用してください。サイトはこちらからご覧いただけます

于 2021-01-26T09:53:27.493 に答える