PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein Befehl, drei mögliche Ausgaben?



ElEsido
18-04-2009, 17:48
Hallo

Ich suche eine Möglichkeit, die folgenden Befehle zusammenzufassen und zu kürzen:

Zum Zitieren von Gesetzen in der Art
Art. 1
Art. 1 Abs. 2
Art. 1 Abs. 2 lit. c
hab' ich mir, um des Abkürzungsverzeichnisses Integrität willen, folgendes ausgeheckt:


% "Art. 1" schreiben als "\Art{1}"
\newcommand{\Art}[1]{\gls{art}~#1~}
% "Art. 1 Abs. 2" schreiben als "\Abs{1}(2}"
\newcommand{\Abs}[2]{\gls{art}~#1 \gls{abs}~#2~}
% "Art. 1 Abs. 2 lit. c" schreiben als "\Lit{1}(2}{c}"
\newcommand{\Lit}[3]{\gls{art}~#1 \gls{abs}~#2 \gls{lit}~#3~}

Das Abkürzungsverzeichnis wird mit Glossaries verwaltet und ich will einen integren Code, deshalb die Verwendung des Befehls \gls.

Gibt es eine Möglichkeit, anstelle der drei Begehle \Art, \Abs, \Lit, einen einzigen Befehl \Art so zu definieren, dass z.B.
\Art{1} die Ausgabe "Art. 1", aber
\Art{1}{2}{c} die Ausgabe "Art. 1 Abs. 2 lit. c" ergibt?

Danke für Unterstützung!

mechanicus
18-04-2009, 19:36
Hallo,

http://projekte.dante.de/DanteFAQ/OptionalesArgument#13

Gruß
Marco

ElEsido
20-04-2009, 10:47
Danke für die rasche Antwort!

Bei dem angegebenen Beispiel scheinen jeweils alle Optionen zwingend zu sein, wenn man eine auslässt, wird sie durch den Buchstaben der Berechunnung ersetzt. (\cubic[2][3]{5} ergibt "2x3 + 3x2 + cx + 5"). Ich suche jedoch eine Lösung, in der gewisse Optionen nicht eingegeben werden müssen.

Mir schwebt etwas in der Art vor:

\Gesetzesverweis[2][3][d]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 lit. d Strafgesetzbuch"
\Gesetzesverweis[2][3]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 Strafgesetzbuch"
\Gesetzesverweis[2]{Strafgesetzbuch} ergibt "Art. 2 Strafgesetzbuch"

Weiss jemand Rat? Gibt es in Latex einen Befehl "count" oder "countif", mit dem die Anzahl Parameter gezählt werden kann und damit verschiedene Folgen ausgelöst werden?

rais
20-04-2009, 21:41
Moin moin,


Bei dem angegebenen Beispiel scheinen jeweils alle Optionen zwingend zu sein, wenn man eine auslässt, wird sie durch den Buchstaben der Berechunnung ersetzt. (\cubic[2][3]{5} ergibt "2x3 + 3x2 + cx + 5"). Ich suche jedoch eine Lösung, in der gewisse Optionen nicht eingegeben werden müssen.

na ja, es ist Dir doch freigestellt, womit Du Deine optionalen Parameter vorbelegst bzw. was Du später damit machst ...


Mir schwebt etwas in der Art vor:

\Gesetzesverweis[2][3][d]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 lit. d Strafgesetzbuch"
\Gesetzesverweis[2][3]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 Strafgesetzbuch"
\Gesetzesverweis[2]{Strafgesetzbuch} ergibt "Art. 2 Strafgesetzbuch"

etwa


\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\makeatletter
\newcommand*\Gesetzesverweis{%
\@ifnextchar[%]
{\Gesetzverweis@i}{\Gesetzverweis@i[\empty]}%
}
\def\Gesetzverweis@i[#1]{%
\@ifnextchar[%]
{\Gesetzverweis@ii[#1]}{\Gesetzverweis@ii[#1][\empty]}%
}
\def\Gesetzverweis@ii[#1][#2]{%
\@ifnextchar[%]
{\Gesetzverweis@iii[#1][#2]}{\Gesetzverweis@ii[#1][#2][\empty]}%
}
\def\Gesetzverweis@iii[#1][#2][#3]#4{%
\ifx#1\empty
#4%<--nur vierter Parameter
\else
\ifx#2\empty
Art.~#1 #4%<--nur erster optionaler -- und der vierte -- Parameter
\else
\ifx#3\empty
Art.~#1 \S~#2 #4%<--nur die ersten beiden optionalen Parameter
\else
Art.~#1 \S~#2 lit. #3 #4%<--alle drei optionalen Parameter
\fi
\fi
\fi
}
\makeatletter
\begin{document}
\Gesetzesverweis[2][3][d]{Strafgesetzbuch}

\Gesetzesverweis[2][3]{Strafgesetzbuch}

\Gesetzesverweis[2]{Strafgesetzbuch}

\Gesetzesverweis{Strafgesetzbuch}
\end{document}

oder vllt mit dem optparams-Paket etwas einfacher


\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel,optparams}
\def\Gesetzverweisintern[#1][#2][#3]#4{%
\ifx#1\empty
#4%<--nur vierter Parameter
\else
\ifx#2\empty
Art.~#1 #4%<--nur erster optionaler -- und der vierte -- Parameter
\else
\ifx#3\empty
Art.~#1 \S~#2 #4%<--nur die ersten beiden optionalen Parameter
\else
Art.~#1 \S~#2 lit. #3 #4%<--alle drei optionalen Parameter
\fi
\fi
\fi
}
\newcommand*\Gesetzesverweis{%
\optparams{\Gesetzverweisintern}{[\empty][\empty][\empty]}
}
\begin{document}
\Gesetzesverweis[2][3][d]{Strafgesetzbuch}

\Gesetzesverweis[2][3]{Strafgesetzbuch}

\Gesetzesverweis[2]{Strafgesetzbuch}

\Gesetzesverweis{Strafgesetzbuch}
\end{document}

MfG

cookie170
20-04-2009, 21:48
Also zu meiner Zeit war das verdammt unüblich, Gesetze ins Literaturverzeichnis rechtswissenschaftlicher Arbeiten zu schreiben.

Nur so als Anmerkung.

voss
20-04-2009, 21:59
Mir schwebt etwas in der Art vor:

\Gesetzesverweis[2][3][d]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 lit. d Strafgesetzbuch"
\Gesetzesverweis[2][3]{Strafgesetzbuch} ergibt "Art. 2 Abs. 3 Strafgesetzbuch"
\Gesetzesverweis[2]{Strafgesetzbuch} ergibt "Art. 2 Strafgesetzbuch"

Weiss jemand Rat? Gibt es in Latex einen Befehl "count" oder "countif", mit dem die Anzahl Parameter gezählt werden kann und damit verschiedene Folgen ausgelöst werden?


\documentclass{article}
\makeatletter
\def\Gesetzesverweis{\@ifnextchar[\Gesverw@i{\Gesverw@i[]}}
\def\Gesverw@i[#1]{\@ifnextchar[{\Gesverw@ii[#1]}{\Gesverw@ii[#1][]}}
\def\ArtAbs#1.#2.#3\@nil{Art.\,#1 \ifx#3\@empty\else Abs.\,#2\fi }
\def\Gesverw@ii[#1][#2]#3{\ArtAbs#1..\@nil
\ifx#2\@empty\else~lit\,d \fi~#3}
\makeatother
\parindent=0pt
\begin{document}

\Gesetzesverweis[2.3][d]{Strafgesetzbuch}

\Gesetzesverweis[2.3]{Strafgesetzbuch}

\Gesetzesverweis[2]{Strafgesetzbuch}

\end{document}


Herbert

ElEsido
21-04-2009, 09:34
Super, ganz herzlichen Dank an Rainer und Herbert!

@Cookie170: Die Gesetze kommen nicht ins Literaturverzeichnis, aber ich erstelle ein Verzeichnis der verwendeten Rechtsakte und offiziellen Texte, da will ich sie aufführen.

ElEsido
21-04-2009, 10:11
Ich habe das ganze mit dem Glossaries-Paket verbunden. Nun können

- die Gesetze mit Hilfe des Pakets "Glossaries" in einem externen File verwaltet werden (der Teil "Definition der Gesetze" im folgenden Beispiel kann in ein File (z.B. materialien.tex) verschoben und mit dem Befehl \loadglsentries[materialien]{materialien} eingebunden werden);

- Mit dem glossaries-Paket definiert werden, wie das Gesetz bei der ersten Nennung und nachfolgend bezeichnet werden soll;

- ein Verzeichnis der Gesetze erstellt werden.

Nochmals herzlichen Dank an Rainer und Herbert.

(Wegen der Kompaktheit habe ich nachfolgend Herberts Code verwendet. Dabei habe ich die letzte Zeile korrigiert: anstelle von
\ifx#2\@empty\else~lit\,d \fi~#3}
muss
\ifx#2\@empty\else~lit\,#2 \fi~#3}
stehen, damit die litera dynamisch ist.)


\documentclass{article}
\usepackage[%
xindy,%
nonumberlist,%
acronym=true,% erstellt ein Abkürzungsverzeichnis
shortcuts,%
%toc, % Wird nicht verwendet, da komischer Stil. Wird jeweils bei \printglossary eingefügt.
section=section,%
numberline,%
sanitize=none%{name=false,description=false,symbol =false,first=false}
% damit in einem Glossareintrag eine andere Abkürzung verwendet werden kann (vgl.
% Materialien-Eintrag {vertbm}))
]{glossaries}
\renewcommand*{\glspostdescription}{} % den Punkt am Ende der Beschreibung im
% Verzeichnis weglassen
\newglossary[mat]{materialien}{mai}{mao}{Rechtsakte und offizielle Texte} %Definition des Glossares Materialien,
% mat ist die extension des Files, das durch \makeglossaries geschrieben wird, mai ist das
% imputfile und mao das outputfile des index-Prozesses
\makeglossaries
% Zum kompilieren mit dem glossaries-paket muss nach dem Durchlauf mit latex und bibtex
% zusätzlich ein Durchlauf mit dem Pearl-script-Befehl "makeglossaries <dokumentenname>"
% gemacht werden. Falls die Seiten durch ddie Verzeichnisse verschoben werdne könnten,
% muss ein Durchlauf mit "latex <dokumentenname>" gefolgt von einem weiteren mit
% "makeglossaries <dokumentenname>" angehängt werden.

%-----Definition der Gesetze ---------
\newglossaryentry{vwvg}{type=materialien,%
name={VwVG, Verwaltungsverfahrensgesetz},%
first={Bundesgesetz über das Verwaltungsverfahren (VwVG)},% Es wird hier nicht auf das Abkürzungsverzeichnis verwiesen wie bei der VertBM, da Gesetzesabkürzungen als nicht ins AbkVerz. gehörend betrachtet werden, anders z.B. die VertBM, die kein Gesetz im formellen Sinn ist.
text=VwVG,%
description={Bundesgesetz über das Verwaltungsverfahren vom 20. Dezember 1968 (Stand am 1. Januar 2009) (SR 172.021)}%
}
%-----Ende der Definition der Gesetze---------

\makeatletter
\def\Gesetzesverweis{\@ifnextchar[\Gesverw@i{\Gesverw@i[]}}
\def\Gesverw@i[#1]{\@ifnextchar[{\Gesverw@ii[#1]}{\Gesverw@ii[#1][]}}
\def\ArtAbs#1.#2.#3\@nil{Art.\,#1 \ifx#3\@empty\else Abs.\,#2\fi }
\def\Gesverw@ii[#1][#2]#3{\ArtAbs#1..\@nil
\ifx#2\@empty\else~lit\,#2 \fi~\gls{#3}}
\makeatother

%================================================= =============================

\begin{document}

% Verzeichnis der Rechtsakte und offiziellen Texte
\pagenumbering{Roman} % Apparat römisch gross paginiert
\newpage
\addcontentsline{toc}{section}{Rechtsakte und offizielle Texte}
\renewcommand{\glsnamefont}[1]{\textnormal{\mdseries #1}} % Bezeichnung der Rechtsakten
% in normaler Schrift, nicht dem default des gewählten styles (bei style=altlist wäre das italic)
\printglossary[%
type=materialien,%
title={Rechtsakte und offizielle Texte},%
toctitle={Rechtsakte und offizielle Texte},%
style=altlist%
]

%Textteil
\newpage
\pagenumbering{arabic}
\Gesetzesverweis[2.3][c]{vwvg}

\Gesetzesverweis[2.3]{vwvg}

\Gesetzesverweis[2]{vwvg}

\end{document}