Hey, ich bin relativ neu bei LaTeX also bitte steinigt mich nicht für falschen Syntax. Gibt es eine Möglich wie man die Anzahl der Zeichen im Argument eines Commands zählen kann? Ich bin Lehrer und versuche Lückentexte zu erstellen. Die Idee ist, dass ich schauen möchte, wie lange das Wort ist welches ich eingebe, um anschließend entsprechend viel Platz für Lückentexte zu lassen. Beispiel Öffne in Overleaf
\newcommand{\zähl}[1]{TOLLER CODE} \newcommand{\lucke}[1]{\ifprintanswers [#1] \else \untenstrich{\zähl{#1}} Keine Ahnung ob mein Pseudecode Sinn macht. Ich bin dankbar für jede Hilfe. Mc_Muffin
Ergebnis 5 von 7
show 2 more comments
|
Das folgende zählt alle Token, die in seinem Argument genannt werden. Es benötigt exakt 2 Expansionen für sein Ergebnis. Es werden alle nicht gruppierten Token (inklusive Leerzeichen) gezählt. Vorkommende Gruppen werden als 1 Token gezählt. Makros werden nicht expandiert, sondern ebenfalls als 1 Token gezählt. Öffne in Overleaf
\documentclass[]{article} \makeatletter % Spezielle Markierungen für Tests und um Argumente zu begrenzen \newcommand*\my@mark{\my@mark} \newcommand*\my@stop{\my@stop} % Makro für das Verlassen von \if...\fi Konstrukten \def\myfi@BTb\fi#1#2#3{\fi#2} % Wandelt eine TeX \if-Abfrage in eine mit LaTeX-Syntax um \newcommand\myiftestTF[1] {% #1% \myfi@BTb \fi \@secondoftwo } % das Benutzermakro \newcommand\counttoken[1] {% \the\numexpr0\counttoken@a #1 \my@mark\my@stop } % Leerzeichen zählen \def\counttoken@a #1 #2\my@stop {% % \my@mark markiert das Ende des Strings \myiftestTF{\ifx\my@mark#2} {\counttoken@b#1\my@stop} {+1\counttoken@a#1#2\my@stop}% } % andere Token zählen \newcommand\counttoken@b[1] {% % \my@stop markiert das Ende des Strings \myiftestTF{\ifx\my@stop#1} {\relax} {+1\counttoken@b}% } \makeatother \begin{document} \counttoken{abc } \end{document} Allerdings halte ich, wie andere in den Kommentaren, das Freilassen aufgrund von Größe für besser geeignet. Gehen wir einfach mal davon aus, ein Mensch schreibt Öffne in Overleaf
\documentclass[]{article} \newsavebox\myspacebox \newcommand*\leavespaceH[1] {% \sbox\myspacebox{\Huge#1}% \ifdim\wd\myspacebox>\linewidth \leavespaceV{#1}% \else \phantom{\usebox\myspacebox}% \fi } \newcommand*\leavespaceV[2][\linewidth]{\phantom{\parbox[t]{#1}{\Huge#2}}} % \fbox soll keinen zusätzlichen Platz verbrauchen, man könnte auch einen \fbox % direkt in den beiden Macros verbauen \setlength\fboxsep{-\fboxrule} \begin{document} \noindent Denkst du das auch? \fbox{\leavespaceH{Nein, denke ich nicht}}\\ \fbox{\leavespaceV{Das kann gar nicht stimmen, denn durch den steigenden Abgasgegendruck nimmt die Leistung des Motors ab}} \end{document} beantwortet 28 Mär '19, 11:49 Skillmon |
Leerraum in der Größe eines bestimmten Textes geht ganz einfach per
\hphantom{Leerraum statt Text}
. Allerdings braucht man ja eigentlich zum händischen Ausfüllen meist etwas mehr Platz. Also eher mit\settowidth
die Breite ermitteln und daraus dann einen Wert für eine Anzahl von Lückenelementen bestimmten.Bevor Du allerdings alles selbst zu Fuß machst, sei darauf hingewiesen, dass es bereits diverse Pakete für Übungen und Prüfungen gibt.
BTW: Wenn Du wissen willst, wie ich die Formatierung Deines Beitrags angepasst habe, dann klick mal auf das große Fragezeichen in der Toolbar zum Antwortfeld unten. In der Anleitung zur Erstellung eines vollständigen Minimalbeispiels (was meist sinnvoller als irgendwelcher Pseudocode ist) ist ebenfalls erklärt, wie man Blockcode korrekt formatiert.
Was genau hast Du denn vor? Möchtest Du den Platz freihalten, den der Text bräuchte, wenn er mit TeX gesetzt würde? Oder möchtest Du die Zeichen zählen und Platz lassen, er proportional zur Anzahl der Buchstaben ist. (Das ist nicht ganz das Gleiche, da die Buchstaben in vielen Schriftarten unterschiedlich breit sind. In Monotype-Fonts sind sie alle gleich breit.) Es sei erwähnt, dass TeX mit Unterstreichungen und Unterstrichen so seine Probleme hat, es könnte z.B. komplexer werden, einen Zeilenumbruch zu erlauben.
Es sei erwähnt, dass man bei Lückentexten, der von SuS auszufüllen ist, vielleicht als Lehrer gut daran tut, die Lückengrößen etwas zu variieren und nicht proportional zum einzufügenden Text dimensionieren (man möchte ja nicht, dass die SuS nur Längen messen). In meiner Schulzeit hatte ich bei solchen Aufgaben auch immer Probleme, da meine Handschrift nicht nur hässlich sondern auch recht groß ist und so selten in die Lücken passte. Abmessen mit der von TeX gebrauchten Länge haut sicher für die wenigsten hin. Wenn es um "Aufdecktexte" auf dem Smartboard geht, sieht es vielleicht anders aus...
Wieder was gelernt: Lückentexte heißen auf Englisch wohl cloze und da gibt es ein LuaLaTeX-Paket für: https://ctan.org/pkg/cloze.
xsim
kann da auch etwas https://ctan.org/pkg/xsim (Kap. 15 der Anleitung). Siehe auch https://texwelt.de/wissen/fragen/20232/luckentext-mit-verschiedenen-versionen Bei TeX.SX findet sich ferner noch ein paar andere Fragen, z.B. https://tex.stackexchange.com/q/16003/35864, https://tex.stackexchange.com/q/165248/35864@user49915 @chuck jeder ist dazu eingeladen, so viel beizutragen, wie er möchte. Allerdings (an user49915) ist das beantworten von Fragen erheblich vereinfacht, wenn man nicht raten muss, was passiert. Deshalb ist das Erstellen eines Minimalbeispiels wünschenswert. Wenn nun einige Nutzer bereit sind ohne dieses zu helfen, ist das deren Sache, andere Nutzer verlangen als Aufwand des Fragestellers ein Minimalbeispiel, bevor sie selbst den Aufwand betreiben. In den meisten Fällen ist ein Minimalbeispiel notwendig, manche Fragen können aber auch ohne eines beantwortet werden.
@user49915 und @chuck ich habe 3 off-topic Kommentare gelöscht, der Inhalt wurde ja auch schon gelesen und es gehört nicht zur Frage. Danke insbesondere @chuck und @Skillmon!