Estoy elaborando un currículum en el que me gustaría enumerar los idiomas que hablo y mi nivel en cada uno de ellos. Para presentar los niveles, deseo usar puntos de habilidad. Quiero obtener una estructura similar a la que se muestra en la imagen de abajo
Para hacerlo, definí un nuevo comando nombrado \cvlanguages
en un archivo .cls:
\newcommand{\cvlanguages}[2]{\renewcommand{\cvlanguages}{#1 \grade{#2}}}
Posteriormente en el código .cls, para imprimir la sección "Idiomas" del currículum, utilizo lo siguiente:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\cvlanguages}
}
\profilesection
se define en otra parte y no es importante aquí.
El \grade
comando también está en el archivo .cls y viene 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}%
}
En el archivo .tex, uso la siguiente línea para llamar al \cvlanguages
comando:
\cvlanguages{Portuguese}{5}
Este procedimiento provoca un error fatal y no tengo idea de por qué. El comando \grade
funciona perfectamente cuando está fuera del \renewcommand
archivo anidado \newcommand
.
He considerado una solución alternativa usando algo como esto:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\fontsize{0.36cm}{0.432cm} \selectfont \cvlanguages{#1} \grade{\cvlanguages{#2}}}
}
pero no tengo idea de cómo hacer que esto funcione, ya que especificar qué argumento imprimir usando "#" no parece funcionar dentro de este \ifthenelse
entorno.
Soy nuevo en este nivel de LaTex y he pasado un tiempo intentando resolver esto, sin éxito. Agradecería cualquier ayuda sobre cómo solucionar este problema.
Respuesta1
Inicialmente \cvlanguages
se define para consumir dos macroargumentos no delimitados y redefinirse a sí mismo.
Esta redefinición puede sucederExactamente una vez.
Cuando ocurre esta redefinición, \cvlanguages
se redefine para no consumir ningún argumento macro y expandirse a algo como la frase " Portugese \grade{5}
" y, por lo tanto, ya no es "redefinible".
Esto significa:
Puede usarlo
\cvlanguages
exactamente una vez con dos argumentos de macro no delimitados para configurar un idioma.
Después de eso, puede usar\cvlanguages
argumentos sin macro para enumerar ese idioma y los puntos de habilidad.Si no usó
\cvlanguages
exactamente una vez con dos argumentos de macro no delimitados para configurar un idioma, todavía\cvlanguages
está definido para consumir dos argumentos de macro no delimitados. Esta circunstancia puede o perturbará la comparación de la\cvlanguages
expansión de ' con el vacío dentro del\ifthenelse
constructo -.
Sugiero usar el \@starttoc
mecanismo:
En el siguiente ejemplo, la macro \cvlanguages
se usa para agregar un idioma y una calificación a la lista de cvlanguages y la macro \listofcvlanguages
se usa para entregar la lista de cvlanguages:
\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}