
私は数週間前に LaTeX3 を学び始め、現在はテーブルをいじっています。これが私のコードです:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_protected:Npn \juhu_tablerow:n #1
{
\int_new:N \l_row_count_int
\int_set:Nn \l_row_count_int { 1 }
\prg_replicate:nn {#1}
{
\int_use:N \l_row_count_int .~row \\
\int_incr:N \l_row_count_int
}
}
\cs_new_eq:NN \tablerow \juhu_tablerow:n
\ExplSyntaxOff
\begin{document}
\begin{tabular}{c}
\tablerow{3}
\end{tabular}
\end{document}
このコードの出力は次のようになります。
1. row
1. row
1. row
望ましい出力は次のようになります。
1. row
2. row
3. row
tabular
環境をたとえば環境に置き換えるとcenter
、期待どおりの出力が得られます。
\\
ここで、を\int_use:N \l_row_count_int .~row \\
に置き換えると,~
、環境\int_incr:N
内でも再び機能するようになりtabular
、出力は次のようになります。
1. row, 2. row, 3. row,
そこで私の質問は、複数の行を使用するときに環境内で整数を増やすことがなぜ機能しないのかtabular
、そして望ましい結果を得るにはどうすればよいのかということです。
答え1
私のささやかなコメントから回答まで。:)
解決に非常に近づきました。ここでの犯人はスコープです。これらの割り当てはローカルで発生しています。グローバルにしましょう。
先に進む前に、整数宣言をコマンド定義の外に移動する必要があります。そうしないと、以降の呼び出しでエラーが発生します\tablerow
。ここで、コーディング規約を少し説明します。
\int_new:N \l_row_count_int
に
\int_new:N \g_row_count_int
カウンターがグローバルになったので:)
、いくつかの置き換えを行いました (xparse
提案してくれた egreg に感謝します)。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\int_new:N \g_row_count_int
\cs_new_protected:Npn \juhu_tablerow:n #1
{
\int_gset:Nn \g_row_count_int { 1 }
\prg_replicate:nn {#1}
{
\int_use:N \g_row_count_int .~row \\
\int_gincr:N \g_row_count_int
}
}
\NewDocumentCommand{ \tablerow }{ m }{
\juhu_tablerow:n{#1}
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{c}
\tablerow{3}
\end{tabular}
\end{document}
そして、すべてが正常に動作するはずです。:)
\g_tmpa_int
グローバル割り当て用のスクラッチ整数を使用して、数ドル節約することもできます。:)