Estou construindo um currículo no qual gostaria de listar os idiomas que falo e meu nível em cada um deles. Para apresentar os níveis, desejo usar pontos de habilidade. Quero obter uma estrutura semelhante à mostrada na imagem abaixo
Para fazer isso, defini um novo comando nomeado \cvlanguages
em um arquivo .cls:
\newcommand{\cvlanguages}[2]{\renewcommand{\cvlanguages}{#1 \grade{#2}}}
Posteriormente no código .cls, para imprimir a seção "Idiomas" do currículo, utilizo o seguinte:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\cvlanguages}
}
\profilesection
é definido em outro lugar e não é importante aqui.
O \grade
comando também está no arquivo .cls e é dado por:
\newcommand{\grade}[1]{
\begin{tikzpicture}
\clip (1em-.4em,-.35em) rectangle (5em +.5em ,1em);
\foreach \x in {1,2,...,5}{
\path[{fill=backColor}] (\x em,0) circle (.35em);
}
\begin{scope}
\clip (1em-.4em,-.35em) rectangle (#1 em +.5em ,1em);
\foreach \x in {1,2,...,5}{
\path[{fill=frontColor}] (\x em,0) circle (.35em);
}
\end{scope}
\end{tikzpicture}%
}
No arquivo .tex, uso a seguinte linha para chamar o \cvlanguages
comando:
\cvlanguages{Portuguese}{5}
Este procedimento causa um erro fatal e não tenho ideia do porquê. O comando \grade
funciona perfeitamente quando está fora do \renewcommand
aninhado no arquivo \newcommand
.
Eu considerei uma solução alternativa usando algo assim:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\fontsize{0.36cm}{0.432cm} \selectfont \cvlanguages{#1} \grade{\cvlanguages{#2}}}
}
mas não tenho ideia de como fazer isso funcionar, pois especificar qual argumento imprimir usando "#" não parece funcionar neste \ifthenelse
ambiente.
Sou novo neste nível de LaTex e passei um tempo tentando descobrir isso, sem sucesso. Eu apreciaria qualquer ajuda sobre como contornar esse problema.
Responder1
Inicialmente \cvlanguages
é definido para consumir dois argumentos macro não delimitados e se redefinir.
Essa redefinição pode acontecerexatamente uma vez.
Quando essa redefinição acontece, ela \cvlanguages
é redefinida para não consumir nenhum argumento macro e se expandir para algo como a frase " Portugese \grade{5}
" e, portanto, não é mais "redefinível".
Isso significa:
Você pode usar
\cvlanguages
exatamente uma vez dois argumentos de macro não delimitados para definir um idioma.
Depois disso, você pode usar\cvlanguages
argumentos sem macro para listar aquele idioma e os pontos de habilidade.Se você não usou
\cvlanguages
exatamente uma vez dois argumentos de macro não delimitados para definir um idioma,\cvlanguages
ainda será definido para consumir dois argumentos de macro não delimitados. Esta circunstância pode/irá perturbar a comparação da\cvlanguages
expansão do ' com o vazio dentro da\ifthenelse
-construção.
Sugiro usar o \@starttoc
mecanismo -:
No exemplo abaixo a macro \cvlanguages
é usada para adicionar um idioma e uma nota à lista de cvidiomas e a macro \listofcvlanguages
é usada para entregar a lista de cvidiomas:
\documentclass{article}
\usepackage{tikz}
% As you didn't provide definitions for these, I invented something on my own:
\definecolor{frontColor}{named}{black}
\definecolor{backColor}{named}{lightgray}
\newcommand\profilesection[1]{%
\noindent\textsf{\textbf{#1}}\\\null\hrulefill\null\\%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\grade}[1]{%
\begin{tikzpicture}%
\clip (1em-.4em,-.35em) rectangle (5em +.5em ,1em);%
\foreach \x in {1,2,...,5}{%
\path[{fill=backColor}] (\x em,0) circle (.35em);%
}%
\begin{scope}%
\clip (1em-.4em,-.35em) rectangle (#1 em +.5em ,1em);%
\foreach \x in {1,2,...,5}{%
\path[{fill=frontColor}] (\x em,0) circle (.35em);%
}%
\end{scope}%
\end{tikzpicture}%
}%
\newcommand\cvlanguagesectionheading{%
\ifnum\cvlanguagecountmacro<1 \else
\ifnum\cvlanguagecountmacro<2 %
\profilesection{LANGUAGE}%
\else
\profilesection{LANGUAGES}%
\fi
\fi
}%
\newcommand\cvlanguagecountmacro{0}%
\newcommand\advancecvlanguagecountmacro{%
\xdef\cvlanguagecountmacro{%
\number\numexpr\cvlanguagecountmacro+1\relax
}%
}%
\newcommand\languageline[2]{%
\par\noindent#1\\\grade{#2}\par%
}%
\makeatletter
\newcommand{\cvlanguages}[2]{%
\protected@write{\@mainaux}{}{%
\string\advancecvlanguagecountmacro
}%
\addtocontents{cvl}{\string\languageline{#1}{#2}}%
}%
\newcommand\listofcvlanguages{%
\cvlanguagesectionheading
\@starttoc{cvl}%
}%
\makeatother
\begin{document}
Some text.
\listofcvlanguages
\cvlanguages{Portugese}{5}
\cvlanguages{English}{5}
\cvlanguages{WeirdSpeech}{2}
\cvlanguages{OddTongue}{1}
\end{document}