为什么“settowidth”在“foreach”中不起作用?

为什么“settowidth”在“foreach”中不起作用?

我希望前两个在第一行分开awide

\documentclass{report}

\usepackage{tikz}

\begin{document}

\newlength{\mylength}
\foreach \i in {dum,iteration} {%
    \settowidth{\mylength}{wide}% this does not seem to work..
}
a\hspace{\mylength}a % .. because the length still looks zero.

\settowidth{\mylength}{wide} % but this does work..
a\hspace{\mylength}a % .. although it's the exact same line X(

\end{document} 

在此处输入图片描述

但事实并非如此。为什么?我怎样才能\settowidth在循环内工作?

答案1

由于我的水晶球正在维护,所以我做出了猜测。;-)

您有一个单词列表,并想将\mylength其设置为最大宽度。

由于中的每个循环\foreach都是在组内进行的,因此使用它是没有希望的,因为\mylength一旦组结束就会返回到其先前的值。

这是一个完成该工作的循环。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\settolargestwidth}{mm}
 {% #1 = length to set, #2 = list of words
  \iagolito_settolargestwidth:Nn #1 { #2 }
 }

% A function still missing from expl3
\box_new:N \l__iagolito_dim_setto_box

\cs_new_protected:Nn \__iagolito_dim_setto:NNn
 {
  \hbox_set:Nn \l__iagolito_dim_setto_box { #3 }
  \dim_set:Nn #1 { #2\l__iagolito_dim_setto_box }
 }
\cs_new_protected:Nn \iagolito_dim_settowidth:Nn
 {
  \__iagolito_dim_setto:NNn #1 \box_wd:N { #2 }
 }
\cs_new_protected:Nn \iagolito_dim_settoheight:Nn
 {
  \__iagolito_dim_setto:NNn #1 \box_ht:N { #2 }
 }
\cs_new_protected:Nn \iagolito_dim_settodepth:Nn
 {
  \__iagolito_dim_setto:NNn #1 \box_dp:N { #2 }
 }
%%%

\dim_new:N \l__iagolito_tempa_dim
\dim_new:N \l__iagolito_tempb_dim
\seq_new:N \l__iagolito_temp_seq

\cs_new_protected:Nn \iagolito_settolargestwidth:Nn
 {
  \dim_zero:N \l__iagolito_tempa_dim
  \seq_set_from_clist:Nn \l__iagolito_temp_seq { #2 }
  \seq_map_inline:Nn \l__iagolito_temp_seq
   {
    \iagolito_dim_settowidth:Nn \l__iagolito_tempb_dim { ##1 }
    \dim_set:Nn \l__iagolito_tempa_dim
     {
      \dim_max:nn { \l__iagolito_tempa_dim } { \l__iagolito_tempb_dim }
     }
   }
  \dim_set:Nn #1 { \l__iagolito_tempa_dim }
 }

\ExplSyntaxOff

\newlength{\mylength}

\begin{document}

\settolargestwidth{\mylength}{a,bbb,cc}

xbbby

x\hspace{\mylength}y

\end{document}

在此处输入图片描述

相关内容