Latex Command für verschiedene Modi
-
- Forum-Anfänger
- Beiträge: 27
- Registriert: Sa 16. Jun 2018, 01:46
Latex Command für verschiedene Modi
Hallo,
ich würde gerne einen eigenen Command schreiben, der folgendes können soll:
Durch den \befehl{}{} hier mit zwei Variablen, sollen entweder die Variablen #1 aktiviert werden, die dann alle Zeilen mit #1 zu Beginn ausführen und alle Variablen #2 rauskommentieren. Natürlich soll das ganze auch umgekehrt funktionieren. D.h. wenn #2 aktiviert wird, werden alle Zeilen mit #1 ignoriert.
In den Zeilen stehen später verschiedene Befehle. Kann mir jemand behilflich sein?
Um zum Beispiel #1 zu aktivieren, habe ich folgendes ausprobiert. Funktioniert aber nicht:
\befehl{\ }{%
}
\newcommand{\befehl}[6]
{
#1 Text
#1 \newpage
#1 Text
#2 Test
#2 \newpage
#2 Test
}
ich würde gerne einen eigenen Command schreiben, der folgendes können soll:
Durch den \befehl{}{} hier mit zwei Variablen, sollen entweder die Variablen #1 aktiviert werden, die dann alle Zeilen mit #1 zu Beginn ausführen und alle Variablen #2 rauskommentieren. Natürlich soll das ganze auch umgekehrt funktionieren. D.h. wenn #2 aktiviert wird, werden alle Zeilen mit #1 ignoriert.
In den Zeilen stehen später verschiedene Befehle. Kann mir jemand behilflich sein?
Um zum Beispiel #1 zu aktivieren, habe ich folgendes ausprobiert. Funktioniert aber nicht:
\befehl{\ }{%
}
\newcommand{\befehl}[6]
{
#1 Text
#1 \newpage
#1 Text
#2 Test
#2 \newpage
#2 Test
}
Als Pseudonym für den Kollegen eines verhaltensauffälligen theoretischen Physikers bestimmst Du einen Befehl mit sechs Argumenten und verwendest aber nur zwei davon.
Aber wie wählst Du aus, welches Argument aktiviert werden soll?
Eine Möglichkeit mit einem dritten Argument für die Auswahl könnte so aussehen:
Eine andere Möglichkeit wäre, mit dem Befehl \ifstrequal des Pakets etoolbox zu arbeiten.
Aber wie wählst Du aus, welches Argument aktiviert werden soll?
Eine Möglichkeit mit einem dritten Argument für die Auswahl könnte so aussehen:
\documentclass[preview]{standalone} \usepackage{xparse} \ExplSyntaxOn \NewDocumentCommand\befehl{ m m m } { \str_case:nn { #3 } { { Text } { #1\ Text\ #1 \newpage #1\ Text } { Test } { #2\ Test\ #2 \newpage #2\ Test } } } \ExplSyntaxOff \begin{document} \befehl{erstes Argument}{zweites Argument}{Text}\par \befehl{erstes Argument}{zweites Argument}{Test} \end{document}
-
- Forum-Anfänger
- Beiträge: 27
- Registriert: Sa 16. Jun 2018, 01:46
Danke, das hilft schon weiter. Leider bekomme ich noch eine Fehlermeldung, wenn ich versuche z.B. durch A oder B die Bildbeschriftung entweder auf Abbildung oder Figure zu ändern. Wahrscheinlich, weil der \renewcommand nicht nach \begin{dokument} auftauchen darf. Gibt es aber eine Möglichkeit, das irgendwie zu lösen, wie ich das vorhabe? Leider kann ich den \befehl{}{}{B} auch nicht vor \begin{dokument} setzen...
Ich weiß, dass man das auch mit den Spracheinstellungen schaffen kann, was ich vorhabe. Ich würde aber gerne wissen, ob man mit einem solchen Makro generell vor dem \begin{dokument} durch Parameter gewisse Einstellungsmöglichkeiten aktivieren und deaktivieren kann.
\documentclass[preview]{standalone}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\befehl{ m m m }
{
\str_case:nn { #3 }
{
{A}
{
\renewcommand{\thefigure}{\arabic{Abbildung}}
}
{B}
{
\renewcommand{\thefigure}{\arabic{Figure}}
}
}
}
\ExplSyntaxOff
\begin{document}
\befehl{}{}{B}
\end{document}
Ich weiß, dass man das auch mit den Spracheinstellungen schaffen kann, was ich vorhabe. Ich würde aber gerne wissen, ob man mit einem solchen Makro generell vor dem \begin{dokument} durch Parameter gewisse Einstellungsmöglichkeiten aktivieren und deaktivieren kann.
\documentclass[preview]{standalone}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\befehl{ m m m }
{
\str_case:nn { #3 }
{
{A}
{
\renewcommand{\thefigure}{\arabic{Abbildung}}
}
{B}
{
\renewcommand{\thefigure}{\arabic{Figure}}
}
}
}
\ExplSyntaxOff
\begin{document}
\befehl{}{}{B}
\end{document}
nö, \renewcommand darf auch nach \begin{document} auftauchen.RicardoShillyShally hat geschrieben:Leider bekomme ich noch eine Fehlermeldung, wenn ich versuche z.B. durch A oder B die Bildbeschriftung entweder auf Abbildung oder Figure zu ändern. Wahrscheinlich, weil der \renewcommand nicht nach \begin{dokument} auftauchen darf.
Das, was Du da umzudefinieren versuchst (\thefigure), gibt normalerweise nur den Zähler selbst (ggf. mit vorgestelltem, übergeordnetem Zähler) aus und \arabic erwartet einen Zählernamen (in Deinem fall `figure'), anders ausgedrückt willst Du `\thefigure' gar nicht ändern, vermutlich eher `\figurename'.
Das Aktivieren könnte auch einfach ein Schalter machen, in etwa
%Präambel \newif\ifonlysecond \onlysecondtrue %in Deinem \befehl z.B. \ifonlysecond#2\else#1\fi
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)
Wenn die Umschaltung mehrere Befehle betreffen soll und die Umschaltung nur einmal in der Präambel stattfinden soll, würde ich das dort direkt machen, also beispielsweise:
Wenn es dagegen im Dokument mehrfach umgeschaltet werden soll oder sogar mehr als zwei Varianten geben soll, würde ich das eher so machen: oder wie bei \captions<Sprache>:
Es hängt also etwas davon ab, wie das ganze dann tatsächlich angewendet werden soll.
\documentclass{article} \newif\ifvarianteA \varianteAtrue %\varianteAfalse \ifvarianteA \newcommand*{\TestA}{A} \newcommand*{\testA}{a} \else \newcommand*{\TestA}{B} \newcommand*{\testA}{b} \fi \begin{document} Variante \TestA{} mit \textA. \end{document}
\documentclass{article} \newcommand*{\TestA}{A} \newcommand*{\testA}{a} \newcommand*{\TestB}{B} \newcommand*{\testB}{b} \newcommand*{\TestC}{C} \newcommand*{\testC}{c} \newcommand*{\Test}{unknown} \newcommand*{\test}{unknown} \newcommand*{\Variante}[1]{% \def\Test{\csname Test#1\endcsname}% \def\test{\csname test#1\endcsname}% } \begin{document} \Variante{A}Test \Test{} mit \test{}. \Variante{B}Test \Test{} mit \test{}. \Variante{C}Test \Test{} mit \test{}. \end{document}
\documentclass{article} \newcommand*{\VarianteA}{% \def\Test{A}% \def\test{a}% } \newcommand*{\VarianteB}{% \def\Test{B}% \def\test{b}% } \newcommand*{\VarianteC}{% \def\Test{C}% \def\test{c}% } \newcommand*{\Test}{unknown} \newcommand*{\test}{unknown} \makeatletter \newcommand*{\Variante}[1]{% \@nameuse{Variante#1}% } \makeatother \begin{document} \Variante{A}Test \Test{} mit \test{}. \Variante{B}Test \Test{} mit \test{}. \Variante{C}Test \Test{} mit \test{}. \end{document}
-
- Forum-Anfänger
- Beiträge: 27
- Registriert: Sa 16. Jun 2018, 01:46
Vermutlich ja.RicardoShillyShally hat geschrieben: Könnte man so einen Switch auch für verschiedene \usepackage{} schreiben?
Da außer Dir hier niemand wissen kann, um welche Pakete es Dir geht, und was konkret Du eigentlich verändern willst, ist eine `bessere' Antwort kaum möglich...
VG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)
Wenn du das abhängig von der verwendeten Sprache ändern willst, dann schau in die [d]babel[/d]-Anleitung. Da ist erklärt, wie man die sprachabhängigen Begriffe ändert. Alternativ kann man das auch unabhängig von babel mit KOMA-Script machen, wenn man eine KOMA-Script-Klasse verwendet.RicardoShillyShally hat geschrieben:Ich wollte eigentlich die \figurename ändern.
Wenn du hingegen abhängig davon ändern willst, wofür die figure-Umgebung tatsächlich verwendet wird, dann sei darauf hingewiesen, dass man auch weitere Gleitumgebungen definieren kann. Siehe dazu beispielsweise das tocbasic-Kapitel in der KOMA-Script-Anleitung oder die Anleitung zum Paket caption.
Es ist übrigens kontraproduktiv die Helfer hier Rätselraten spielen zu lassen. Es viel zielführender, das eigentliche Problem zu schildern und ein Minimalbeispiel dafür anzugeben.