1

Is it possible to make a global foreach? How is the correct way to define arguments inside a \csdef command?

\documentclass[a4paper,12pt,hidelinks]{article}

\usepackage[utf8]{inputenc} 
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}

\usepackage{filecontents}
\usepackage{xstring}
\usepackage{alphalph}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{forloop}

%dados-a
\newcommand {\auxsistelet}[3]{\IfStrEq{#2}{BICICLETA}{\IfStrEqCase{#1}    {{}{Seus sistemas de segurança para o tráfego (freio e direção) atuavam a     contento}{n}{Seus componentes de segurança para o tráfego (direção e     freio) não puderam ser testados devido à magnitude dos danos ocasionados     pelo acidente}}[Seus sistemas de segurança para o tráfego (freio e     direção) atuavam a contento, excetuando-se #1, face aos danos sofridos no     evento]
}{
\IfStrEqCase{#1}{{}{Seus sistemas de segurança para o tráfego (freio,     direção e elétrico) atuavam a contento}{n}{Seus componentes de segurança     para o tráfego (direção, freio e elétrico) não puderam ser testados devido     à magnitude dos danos ocasionados pelo acidente}}[\IfStrEq{#1}{chave}    {\IfStrEq{#3}{s}{Seus componentes de segurança para o tráfego (direção,     freio) funcionavam a contento. O sistema elétrico não pôde ser testado     devido à ausência da chave do referido veículo}{Seus componentes de     segurança para o tráfego (direção, freio e elétricos) não puderam ser     testados devido à ausência da chave do referido veículo. Da mesma forma,     fica prejudicada a análise de sua porção interna}}{Seus sistemas de     segurança para o tráfego (freio, direção e elétricos) atuavam a contento,     excetuando-se #1, face aos danos sofridos no evento}]}.}

%dados
\newcommand \placa {AAA-0000}
\newcommand \eletrico{\sistelet{n}\\}
\newcommand \tipoveiculo {AUTOMÓVEL}
\newcommand \moto {n}

\newcommand \placab {BBB-0000}
\newcommand \eletricob{\sisteletb{n}\\}
\newcommand \tipoveiculob {MOTOCICLETA}
\newcommand \motob {s}

\begin{document}

\ifdef{\placa}{\newcommand \sistelet[1]{\auxsistelet{#1}{\tipoveiculo}{\moto}}}{}

\foreach \x in {b,...,e}{
\ifcsdef{placa\x}{

\global\csdef{sistelet\x}#1{\auxsistelet{##1}{\csname     tipoveiculo\x\endcsname}{\csname moto\x\endcsname}}
}{}
}

\ifdef{\eletrico}{\eletrico}{}
\ifdef{\eletricob}{\eletricob}{}

\end{document}
12
  • What are you trying to do exactly? You don't seem to use \global\foreach ? And you don't say what the problem is ....
    – cfr
    Apr 6 '16 at 0:20
  • 1
    why use a loop that uses a group? if you did that you would not need global, also you are defining all your commands in terms of \x so they would all have the same value. It would help if you said what the intention of this code is? Apr 6 '16 at 0:28
  • 1
    but what do you want \sisteleta, \ \sisteletb etc to be defined to be? currently you are suggesting that they all have definition \csdef{sistelet\x}#1{\auxsistelet{##1}{\csname tipoveiculo\x\endcsname}{\csname moto\x\endcsname}} which means they all have identical definition. If you want \x to expand before making the definition you need different code but hard to guess really/ Apr 6 '16 at 0:44
  • 2
    I typed texdoc etoolbox then I searched for csdef in the PDF viewer, and I see the explanations there relative to \csdef and right below it there is a \csgdef which is said to make global definitions.
    – user4686
    Apr 6 '16 at 6:55
  • 2
    @jfbu: Probably need the csxdef to ensure that the loop parameter is expanded. Apr 6 '16 at 8:49

Browse other questions tagged or ask your own question.