goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Komma oder und bei Aufzählung mit variabler Anzahl an Argume

 

thomasninty
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 04.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2016, 12:55     Titel: Komma oder und bei Aufzählung mit variabler Anzahl an Argume
  Antworten mit Zitat      
Hallo zusammen,
ich habe ein Problem mit der Erstellung eines Dokuments. Ich möchte ein Dokument erstellen, in dem ich abhängig vom Umfang der zu bearbeitenden Unterpunkte den Text anpassen kann. Ich hatte mir das ungefähr so gedacht:

Code • Öffne in Overleaf

\documentclass[a4paper,oneside,10pt]{report}
\usepackage{german,a4}        
\usepackage[T1]{fontenc}        
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{ifthen}

\newboolean{Teil1}
\newboolean{Teil2}
\newboolean{Teil3}

\setboolean{Teil1}{true}
\setboolean{Teil2}{true}
\setboolean{Teil3}{true}

\begin{document}
\newcommand{\Satz} [3]{Dieser Text enthält #1, #2  und #3.}

\Satz{\ifTeil1 Teil 1\fi}{\ifTeil2 Teil 2\fi}{\ifTeil3 Teil 3\fi} \\


\end{document}
 
 


Als Ausgabe sollte erscheinen: "Dieser Text enthält Teil 1, Teil 2 und Teil 3."

Mein Problem ist nun, das es vorkommen kann das der Text Teil 3 nicht enthalten soll und daher Teil3 = false gilt. In der Ausgabe würde dann erscheinen: "Dieser Text enthält Teil 1, Teil 2."

Wie kann ich es machen, dass in einem solchen Fall automatisch ein "und" statt einem "," erscheint? Also: "Dieser Text enthält Teil 1 und Teil 2."

Vielen Dank vorab,
thomasninty
Private Nachricht senden Benutzer-Profile anzeigen

saputello
Forum-Fortgeschrittener
Forum-Fortgeschrittener

Beiträge: 77
Anmeldedatum: 15.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2016, 13:16     Titel:
  Antworten mit Zitat      
Viel zu umständlich. Das geht ganz ohne zusätzliche Schalter:
Code • Öffne in Overleaf
\documentclass[a4paper,oneside,10pt]{report}
\usepackage[ngerman]{babel}% german ist veraltet, a4 ist ein no-go (siehe l2tabu)
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}% Kein moderner Editor hat ansinew als Codierung voreingestellt.
\usepackage{lmodern}
\usepackage{scrbase}% stellt \IfArgIsEmpty bereit siehe scrguide.pdf

\begin{document}
\newcommand{\Satz} [3]{Dieser Text enthält #1\IfArgIsEmpty{#3}{ und #2}{, #2 und #3}.}

\Satz{Teil 1}{Teil 2}{Teil 3}

\Satz{Teil 1}{Teil 2}{}

\end{document
}

Ich würde allerdings eher eine Listenverarbeitung verwenden. Siehe dazu Paket auf CTANetoolbox. Dabei braucht man dann keine leeren Argumente, wenn man nur 2 statt 3 Elemente hat.

BTW: Das ist hier das komplett falsche Forum für die Frage. Das Forum "Links" ist ausschließlich für das Posten von sehr nützlichen Links rund um TeX. Deine Frage wäre besser aufgehoben unter Eigene Strukturen.
Private Nachricht senden Benutzer-Profile anzeigen

thomasninty
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 04.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2016, 13:18     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Oh ja stimmt, da bin ich versehentlich in die falsche Rubrik gerutscht. Tut mir leid.
Private Nachricht senden Benutzer-Profile anzeigen

cgnieder
Forum-Meister
Forum-Meister


Beiträge: 689
Anmeldedatum: 22.10.10
Wohnort: Herrenberg
Version: TeX Live 2016
     Beitrag Verfasst am: 04.10.2016, 20:40     Titel:
  Antworten mit Zitat      
Hier ein Beispiel analog zu Saputellos mit Paket auf CTANetoolbox:

Code • Öffne in Overleaf
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{etoolbox}

\newcommand\Satz[3]{Dieser Text enthält #1\ifblank{#3}{ und #2}{, #2 und #3}.}

\begin{document}

\Satz{Teil 1}{Teil 2}{Teil 3}

\Satz{Teil 1}{Teil 2}{}

\end{document
}


Mit expl3 geht das noch leichter und flexibler:

Code • Öffne in Overleaf
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{xparse}

\ExplSyntaxOn
\seq_new:N \l_thomasninty_satz_seq
\cs_new_protected:Npn \thomasninty_satz:n #1
  {
    \seq_set_from_clist:Nn \l_thomasninty_satz_seq {#1
}
    \seq_use:Nnnn \l_thomasninty_satz_seq
      { ~ und ~ } % wenn es nur zwei sind
      { , ~ }     % wenn es mehr als zwei sind
      { ~ und ~ } % zwischen den letzten zwei bei mehr als zwei
  }

\NewDocumentCommand \Satz {m}
  { \thomasninty_satz:n {#1} }
\ExplSyntaxOff

\begin{document}

\Satz{Teil 1, Teil 2, Teil 3}

\Satz{Teil 1, Teil 2}

\Satz{Teil 1, Teil 2, Teil 3, Teil 4}

\end{document}


Grüße
_________________

Clemens
------------------------------
Paket auf CTANchemmacros · Paket auf CTANchemformula · Paket auf CTANleadsheets · Paket auf CTANtranslations · Paket auf CTANxsim.
Private Nachricht senden Benutzer-Profile anzeigen

thomasninty
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 04.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2016, 09:28     Titel:
  Antworten mit Zitat      
Schon mal vielen Dank für eure Hilfe. Ich bekomme es allerdings noch immer nicht so richtig ans laufen.
Und zwar möchte ich die Teile Teil 1, Teil 2 und Teil 3 über eine if-Abfrage einbinden. In etwa so:

Code • Öffne in Overleaf

\documentclass[a4paper,oneside,10pt]{report}
\usepackage{german,a4}        
\usepackage[T1]{fontenc}      
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{ifthen}
\usepackage{xparse}

\newboolean{Teil1}
\newboolean{Teil2}
\newboolean{Teil3}
\setboolean{Teil1}{true}
\setboolean{Teil2}{true}
\setboolean{Teil3}{true}

\ExplSyntaxOn
\seq_new:N \l_thomasninty_satz_seq
\cs_new_protected:Npn \thomasninty_satz:n #1
{
   \seq_set_from_clist:Nn \l_thomasninty_satz_seq {#1
}
   \seq_use:Nnnn \l_thomasninty_satz_seq
   { ~ und ~ } % wenn es nur zwei sind
   { , ~ }     % wenn es mehr als zwei sind
   { ~ und ~ } % zwischen den letzten zwei bei mehr als zwei
}

\NewDocumentCommand \Satz {m}
{ \thomasninty_satz:n {#1} }
\ExplSyntaxOff



\begin{document}

\Satz{\ifTeil1 Teil 1 \fi ifTeil2 , Teil 2 \fi \ifTeil3 Teil 3 \fi}

\end{document}

 


Hintergrund ist, dass je nachdem ob einer der Teile in einer anderen Datei als true oder als false deklariert wurde, der entsprechende Teil eingebunden wird oder nicht. Das klappt auch einigermaßen. Leider wird die Unterscheidung, ob "," oder "und" verwendet werden soll nicht immer. Habt ihr eine Idee woran das liegt? Oder bin ich komplett auf dem Holzweg?

Gruß,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen

cgnieder
Forum-Meister
Forum-Meister


Beiträge: 689
Anmeldedatum: 22.10.10
Wohnort: Herrenberg
Version: TeX Live 2016
     Beitrag Verfasst am: 05.10.2016, 11:22     Titel:
  Antworten mit Zitat      
thomasninty hat Folgendes geschrieben:
Leider wird die Unterscheidung, ob "," oder "und" verwendet werden soll nicht immer. Habt ihr eine Idee woran das liegt?


Das liegt daran, dass die verschiedenen Teile bei diesem Ansatz nie leer sind. Aus Sicht von dem \seq_use:Nnnn hat die Sequence in Deinem Beispiel immer drei Teile, die nur eben manchmal keine sichtbare Ausgabe erzeugen.
_________________

Clemens
------------------------------
Paket auf CTANchemmacros · Paket auf CTANchemformula · Paket auf CTANleadsheets · Paket auf CTANtranslations · Paket auf CTANxsim.
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 06.10.2016, 12:19 Uhr von Johannes_B
Von Links nach Eigene Strukturen

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 goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de