我正在使用一个根据以下 SO 问题的答案改编的简单宏:
https://stackoverflow.com/questions/3951392/latex-space-after-every-letter
修改后的宏只需获取一个字符串并在每个字母后添加一个换行符......
它工作正常,直到我尝试将它与 TikZ foreach 循环一起使用,此时它返回的不是每行一个字符的字符串,而是字符串......
对于如何解决该问题或者是否可以解决该问题,您有什么想法吗?
LaTeX 是:
\documentclass[twoside,letterpaper,12pt]{article}
\usepackage{tikz}
\makeatletter
\newcommand{\charperline}[1]{%
\@tfor\letter:=#1\do{%
\letter\\%
}%
}
\makeatother
\begin{document}
\charperline{This Works}
\foreach \tmp in {Not This,Or This} {
\charperline{\tmp}
}
\end{document}
以下是 pdflatex 的结果:
日志文件中没有什么值得注意的内容。
编辑
只需添加一个稍微简单的版本...
\documentclass[twoside,letterpaper,12pt]{article}
\usepackage{pgffor}
\makeatletter
\begin{document}
\foreach \tmp in {Not This,Or This} {
\@tfor\letter:=\tmp\do{%
\letter\\%
}%
}
\makeatother
\end{document}
答案1
问题是你需要强制\tmp
将其扩展为字母序列,而目前\charperline
它只被视为单个标记。我相信有一种认可的方法可以做到这一点,但这是我过去用来解决类似问题的方法:
编辑正如 percusse 在评论中所说,更好的解决方案是使用:
\foreach \tmp in {Not This,Or This} {
\expandafter\charperline\expandafter{\tmp}
}
\documentclass[twoside,letterpaper,12pt]{article}
\usepackage{tikz}
\makeatletter
\newcommand{\charperline}[1]{%
\@tfor\letter:=#1\do{%
\letter\\%
}%
}
\makeatother
\begin{document}
\charperline{This Works}
\foreach \tmp in {Not This,Or This} {
\edef\Charpy{\noexpand\charperline{\tmp}}
\Charpy
}
\end{document}
扩大的力量\edef
,\tmp
因此\Charpy
被定义为\charperline{Not This}
(当\tmp
是“不是这个”时),然后按照你想要的方式\Charpy
应用于“不是这个”:\charperline