Ich erstelle einen Lebenslauf, in dem ich die Sprachen auflisten möchte, die ich spreche, und mein Niveau in jeder dieser Sprachen. Zur Darstellung der Niveaus möchte ich Skill-Punkte verwenden. Ich möchte eine Struktur erhalten, die der im Bild unten gezeigten ähnelt.
Zu diesem Zweck habe ich einen neuen Befehl definiert, der \cvlanguages
auf einer .cls-Datei basiert:
\newcommand{\cvlanguages}[2]{\renewcommand{\cvlanguages}{#1 \grade{#2}}}
Um später im .cls-Code den Abschnitt „Sprachen“ im Lebenslauf auszudrucken, verwende ich Folgendes:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\cvlanguages}
}
\profilesection
ist an anderer Stelle definiert und hier nicht wichtig.
Der \grade
Befehl befindet sich auch in der CLS-Datei und wird wie folgt angegeben:
\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}%
}
Auf der .tex-Datei verwende ich die folgende Zeile, um den \cvlanguages
Befehl aufzurufen:
\cvlanguages{Portuguese}{5}
Dieses Verfahren verursacht einen schwerwiegenden Fehler und ich habe keine Ahnung, warum. Der Befehl \grade
funktioniert einwandfrei, wenn er sich außerhalb der \renewcommand
Verschachtelung befindet \newcommand
.
Ich habe über eine alternative Lösung nachgedacht, die stattdessen etwa Folgendes verwendet:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\fontsize{0.36cm}{0.432cm} \selectfont \cvlanguages{#1} \grade{\cvlanguages{#2}}}
}
\ifthenelse
aber ich habe keine Ahnung, wie ich das hinbekommen soll, da die Angabe, welches Argument mit „#“ gedruckt werden soll, in dieser Umgebung nicht zu funktionieren scheint .
Ich bin neu auf diesem LaTex-Niveau und habe eine Weile versucht, das herauszufinden, aber ohne Erfolg. Ich wäre für jede Hilfe dankbar, wie ich dieses Problem umgehen kann.
Antwort1
Zunächst \cvlanguages
ist es so definiert, dass es zwei nicht abgegrenzte Makroargumente verwendet und sich selbst neu definiert.
Diese Neudefinition kann erfolgengenau einmal.
Wenn diese Neudefinition stattfindet, \cvlanguages
wird es so neu definiert, dass kein Makroargument verbraucht wird und es sich zu etwas wie der Phrase " Portugese \grade{5}
" erweitert und ist daher nicht mehr "neu definierbar".
Das heisst:
Sie können es
\cvlanguages
genau einmal mit zwei nicht abgegrenzten Makroargumenten verwenden, um eine Sprache festzulegen.
Danach können Sie es\cvlanguages
ohne Makroargumente verwenden, um diese eine Sprache und die Skill-Punkte aufzulisten.\cvlanguages
Wenn Sie nicht genau einmal zwei nicht abgegrenzte Makroargumente zum Festlegen einer Sprache verwendet haben ,\cvlanguages
ist immer noch so definiert, dass zwei nicht abgegrenzte Makroargumente verwendet werden. Dieser Umstand kann/wird den Vergleich der\cvlanguages
Erweiterung von mit Leere innerhalb der\ifthenelse
-Konstruktion stören.
Ich schlage vor, den \@starttoc
-Mechanismus zu verwenden:
Im folgenden Beispiel \cvlanguages
wird das Makro verwendet, um der Liste der Lebenslaufsprachen eine Sprache und eine Note hinzuzufügen und \listofcvlanguages
um die Liste der Lebenslaufsprachen zu übermitteln:
\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}