答案1
答案2
另一种listofitems
选择...
\documentclass{article}
\usepackage{listofitems}
\begin{document}
\readlist*\mylist{str1,str2,str3}
\framebox{%
\parbox{4em}{%
\foreachitem\x\in\mylist[]{%
\makebox[4em][l]{\x}%
\ifnum\xcnt<\mylistlen\relax\\\fi%
}%
}%
}
\end{document}
或者切换测试顺序:
\documentclass{article}
\usepackage{listofitems}
\begin{document}
\readlist*\mylist{str1,str2,str3}
\framebox{%
\parbox{4em}{%
\foreachitem\x\in\mylist[]{%
\ifnum\xcnt=1\relax\else\\\fi%
\makebox[4em][l]{\x}%
}%
}%
}
\end{document}
答案3
带有条件(最小代码文本)
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\mylist{str1,str2,str3}
\framebox{
\parbox{4em}{%
\foreach \x[count=\n] in \mylist {%
\ifnum \n >1 \\ \fi
\makebox[4em][s]{\x}%
}%
}
}
\end{document}
使用数组(只是为了好玩)
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\mylist{str1,str2,str3}
\def\before{{"\noexpand\\",{}}}
\framebox{
\parbox{4em}{%
\foreach \x[count=\n from 0] in \mylist {%
\pgfmathparse{\before[!\n]}\pgfmathresult
\makebox[4em][s]{\x}%
}%
}
}
\end{document}
沒有任何條件....
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\mylist{str2,str3}
\framebox{
\parbox{4em}{%
str1
\foreach \x in \mylist {%
\\\makebox[4em][s]{\x}%
}%
}
}
\end{document}
答案4
这是对一个老问题的回答,但由于所有先前的答案都使用基于计数器的条件,为了完整起见,我建议采用基于重新定义宏的解决方案。
\documentclass[varwidth, border=7pt]{standalone}
\usepackage{pgffor}
\begin{document}
\def\mylist{str1,str2,str3}
\framebox{
\parbox{4em}{%
\foreach[remember=\newline as \mynewline (initially \relax)] \x in \mylist {%
\mynewline\makebox[4em][s]{\x}%
}%
}
}
\end{document}
\def
使用经典的&也可以获得相同的结果\gdef
。
\documentclass[varwidth, border=7pt]{standalone}
\usepackage{pgffor}
\begin{document}
\def\mylist{str1,str2,str3}
\framebox{
\parbox{4em}{%
\def\mynewline{}%
\foreach \x in \mylist {%
\mynewline\makebox[4em][s]{\x}%
\gdef\mynewline{\newline}%
}%
}
}
\end{document}
笔记:\gdef
这里需要,因为创建\foreach
了一个组。如果我们想避免这种情况,我们可以使用第一个解决方案或另一个循环,例如\xintFor
。