goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Direktlinks:
Zuletzt aktive Beiträge
Unbeantwortete Beiträge
[Erweitert]

Forenstatistik:
Beiträge: 97970
Top-Poster: Johannes_B (5059)

Wir begrüßen unseren neuesten Benutzer GiFi.

Links:


Mit Unterstützung von DANTE e.V.: Deutschsprachige Anwendervereinigung TeX. Danke den Mitgliedern!





Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Latex Command für verschiedene Modi

 

RicardoShillyShally
Forum-Anfänger
Forum-Anfänger

Beiträge: 10
Anmeldedatum: 16.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2019, 03:53     Titel: Latex Command für verschiedene Modi
  Antworten mit Zitat      
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
}
Private Nachricht senden Benutzer-Profile anzeigen

Bartman
Forum-Meister
Forum-Meister


Beiträge: 1695
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: ---
     Beitrag Verfasst am: 09.06.2019, 07:14     Titel:
  Antworten mit Zitat      
Als Pseudonym für den Kollegen eines verhaltensauffälligen theoretischen Physikers Wink 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:

Code • Öffne in Overleaf
\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}


Eine andere Möglichkeit wäre, mit dem Befehl \ifstrequal des Pakets etoolbox zu arbeiten.
Private Nachricht senden Benutzer-Profile anzeigen

RicardoShillyShally
Forum-Anfänger
Forum-Anfänger

Beiträge: 10
Anmeldedatum: 16.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2019, 10:13     Titel:
  Antworten mit Zitat      
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}
Private Nachricht senden Benutzer-Profile anzeigen

rais
Forum-Guru
Forum-Guru

Beiträge: 389
Anmeldedatum: 21.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2019, 11:59     Titel:
  Antworten mit Zitat      
RicardoShillyShally hat Folgendes 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.

nö, \renewcommand darf auch nach \begin{document} auftauchen.
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
Code • Öffne in Overleaf

%Präambel
\newif\ifonlysecond
\onlysecondtrue

%in Deinem \befehl z.B.
\ifonlysecond#2\else#1\fi
 


VG
Rainer
_________________

One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2019, 12:23     Titel:
  Antworten mit Zitat      
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:
Code • Öffne in Overleaf
\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
}

Wenn es dagegen im Dokument mehrfach umgeschaltet werden soll oder sogar mehr als zwei Varianten geben soll, würde ich das eher so machen:
Code • Öffne in Overleaf

\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
}
oder wie bei \captions<Sprache>:
Code • Öffne in Overleaf
\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
}

Es hängt also etwas davon ab, wie das ganze dann tatsächlich angewendet werden soll.

RicardoShillyShally
Forum-Anfänger
Forum-Anfänger

Beiträge: 10
Anmeldedatum: 16.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2019, 07:53     Titel:
  Antworten mit Zitat      
Danke für die Beispiele. Es klappt nun.

rais hat recht. Ich wollte eigentlich die \figurename ändern. Es funktioniert jetzt auch mit \renewcommand nach \begin{dokument}.

Könnte man so einen Switch auch für verschiedene \usepackage{} schreiben?

LG
Private Nachricht senden Benutzer-Profile anzeigen

rais
Forum-Guru
Forum-Guru

Beiträge: 389
Anmeldedatum: 21.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2019, 00:18     Titel:
  Antworten mit Zitat      
RicardoShillyShally hat Folgendes geschrieben:

Könnte man so einen Switch auch für verschiedene \usepackage{} schreiben?

Vermutlich ja.

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)
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2019, 07:30     Titel:
  Antworten mit Zitat      
RicardoShillyShally hat Folgendes geschrieben:
Ich wollte eigentlich die \figurename ändern.

Wenn du das abhängig von der verwendeten Sprache ändern willst, dann schau in die babel-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.

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 InfoMinimalbeispiel dafür anzugeben.

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2019 goLaTeX.de