@for循環變數名稱列印而不是選項卡環境中的內容

@for循環變數名稱列印而不是選項卡環境中的內容

我正在嘗試使用tabbing環境和@for循環自動生成一些縮進線。由於某種原因,這會導致 for 迴圈一遍又一遍地列印迭代變數的名稱而不是內容。我究竟做錯了什麼?

微量元素:

\documentclass{article}
\begin{document}
\begin{tabbing}
a \= b\\
\> c\\
\makeatletter
\@for\ij:=abc,def\do{\>\ij{}\\}
\makeatother
\end{tabbing}
\end{document}

答案1

\>表格單元格建立群組,因此當 TeX 轉到另一個儲存格時(此處,當您使用前往下一列或\\下一行), 任何非全域指派都會遺失。\@for對循環變數進行局部賦值,因此當表格單元結束時它自然會遺失。您會看到列印循環變數的“名稱”,因為您選擇了\ij,其標準定義列印荷蘭語二合字母“ij”。如果您使用了\ii(或任何未定義的內容),您將收到錯誤。

如果循環變數是 後的第一個變量\>,您可以在表格單元格以 結束之前作弊並展開循環變數\expandafter。如果循環變數之前有任何內容,則這將不起作用(無需調整):

\@for\ii:=abc,def\do{\expandafter\>\ii{}\\}

您也可以在結束表格單元格之前指派給全域變量,然後可以讓全域變數出現在任何位置。

\@for\ii:=abc,def\do{\global\let\jj=\ii  \> something \jj{}\\}

但我建議使用不使用循環變數的循環函數。例如,expl3's \clist_map_inline:nn(這裡重新命名為\ListLoop):

\documentclass{article}
\ExplSyntaxOn
\cs_new_eq:NN \ListLoop \clist_map_inline:nn
\ExplSyntaxOff
\begin{document}
\begin{tabbing}
a \= b\\
\> c\\
\ListLoop{abc,def}{\>#1\\}
\end{tabbing}
\end{document}

第一個參數是要迭代的列表,第二個參數是每次迭代時執行的程式碼,其中#1是當前項目(或您在定義中##1使用的項目)。\ListLoop

相關內容