TikZ foreach 使用宏时出现的问题

TikZ foreach 使用宏时出现的问题

我正在使用一个根据以下 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

在此处输入图片描述

相关内容