\newcommand mit \newcommand erzeugen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


moe
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 31. Mär 2011, 12:38

\newcommand mit \newcommand erzeugen

Beitrag von moe »

Hallo zusammen,

ich möchte in Latex eine kleine Geschichte schreiben, bei der viele Namen vorkommen. Beim ersten Aufruf des Namens soll nur der Vorname angezeigt werden und eine Fußnote, die den vollständigen Namen und vll noch ein paar Informationen zu dieser Person enthält.
Da dachte ich an das Akronym-Packet und kam erst soweit:
\newacro{Max}{Max Mustermann, geb. 1980}
\newcommand{\maxm}{ \ac{Max} }
Was dann später im Text einfach mit \maxm aufgerufen wird.
Das würde auch so gehen.
Aber um das ganze zu optimieren und leichter Namen hinzufügen zu können, habe ich mir folgendes überlegt:
\newcommand{ \newname }[3]{
       \newacro{ #2 }{ #3 }
       \newcommand{ #1 }{ \ac{ #2 } }
}

\newname{ \maxm }{ Max }{ Max Mustermann, geb, 1980 }
Wenn ich jetzt \maxm aufrufe, steht im Text Max! fettgedruckt.

Hat jemand Verbesserungsvorschläger oder vll auch eine ganz andere Idee?

Grüße,
Moe

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

In diesem eher trivialen Fall könnte man auch
\newcommand{\newname}[2]{%
  \newacro{#1}{#2}%
  \expandafter\newcommand\csname Acro#1\endcsname{\ac{#2}}%
}

\newname{Max}{Max Mustermann, geb, 1980}
...
\AcroMax% (statt \maxm)
verwenden.

BTW: Du solltest beim Definieren von Makros mit Leerzeichen etwas sparsamer umgehen!

moe
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 31. Mär 2011, 12:38

Beitrag von moe »

Hi Koma,

vielen Dank für deine Antwort!
Nur leider funktioniert das bei mir nicht richtig. Also die Fussnoten stimmen, aber die Namen (Akronyme) nicht. Liegt das an meinem Compiler (TexMaker)?

Code:
\newcommand{\newname}[2]{%
  \newacro{#1}{#2}%
  \expandafter\newcommand\csname Acro#1\endcsname{\ac{#1}}%
}

\newname{Max}{Max Mustermann, geb. 1980}
\newname{Mara}{Mara Mustermann, geb. 1982}

\begin{document}

\AcroMax und \AcroMara gingen ins Kino. \AcroMax wollte in StarWars, aber \AcroMara wollte lieber in Titanic.

\end{document}
Ausgabe:
Mara(1) und Mara(2) gingen ins Kino. Mara wollte in StarWars, aber Mara wollte lieber in Titanic.

(1) Max Mustermann, geb. 1980
(2) Mara Mustermann, geb. 1982

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

TeXMaker ist kein Compiler, sondern ein Editor und raten liegt mir nicht.

moe
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 31. Mär 2011, 12:38

Beitrag von moe »

Ok, sry, hier das Minimalbeispiel. Ich benutze den Editor TexMaker und TexLive als Distribution.
\documentclass{scrbook}

\usepackage[ngerman]{babel}

\usepackage[footnote]{acronym}
\newcommand{\newname}[2]{%
	\newacro{#1}{#2}%
	\expandafter\newcommand\csname Acro#1\endcsname{\ac{#1}}%
}

\newname{Max}{Max Mustermann, geb. 1980}
\newname{Mara}{Mara Mustermann, geb. 1982}

\begin{document}
Eines Tages ging \AcroMax mit \AcroMara ins Kino. \AcroMax \ wollte in StarWars, wohingegen \AcroMara \ Titanic bevorzugte.
\end{document}
Output:
Eines Tages ging Mara1 mit Mara2 ins Kino. Mara wollte in StarWars, wohingegen
Mara Titanic bevorzugte.

1 Max Mustermann, geb. 1980
2 Mara Mustermann, geb. 1982

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag von Sepp99 »

Bei mir funktioniert es:
\listfiles
\documentclass{scrbook}

\usepackage[ngerman]{babel}

\usepackage[footnote]{acronym}
\newcommand{\newname}[2]{%
   \newacro{#1}{#2}%
   \expandafter\newcommand\csname Acro#1\endcsname{\ac{#1}}%
}

\newname{Max}{Max Mustermann, geb. 1980}
\newname{Mara}{Mara Mustermann, geb. 1982}

\begin{document}
Eines Tages ging \AcroMax\ mit \AcroMara\ ins Kino. \AcroMax\ wollte in StarWars, wohingegen \AcroMara\ Titanic bevorzugte.
\end{document} 
Vergleiche einmal die Versionen:
*File List*
scrbook.cls 2011/02/19 v3.08a KOMA-Script document class (book)
scrkbase.sty 2011/02/19 v3.08a KOMA-Script package (KOMA-Script-dependent basics and keyval usage)
scrbase.sty 2011/02/19 v3.08a KOMA-Script package (KOMA-Script-independent basics and keyval usage)
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
scrlfile.sty 2011/02/11 v3.08a KOMA-Script package (loading files)
tocbasic.sty 2010/10/01 v3.07a KOMA-Script package (handling toc-files)
scrsize11pt.clo 2011/02/19 v3.08a KOMA-Script font size class option (11pt)
typearea.sty 2011/02/19 v3.08a KOMA-Script package (type area)
babel.sty 2008/07/06 v3.8l The Babel package
bblopts.cfg 2006/07/31 v1.0 MiKTeX 'babel' configuration
ngermanb.ldf 2008/07/06 v2.6n new German support from the babel system
acronym.sty 2010/09/08 v1.36 Support for acronyms (Tobias Oetiker)
suffix.sty 2006/07/15 1.5 Variant command support
Ausgabe siehe Anhang.

Gruß, Sepp.-
Dateianhänge
t_acronym.pdf
(43.74 KiB) 636-mal heruntergeladen

moe
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 31. Mär 2011, 12:38

Beitrag von moe »

Super, danke für's Testen!
Ja, dann liegt es wohl an meinen alten Paketen, die neusten sind von 2009.
Ich werde die Tage mal ein Update durchführen und setze solange den Status auf gelöst. Ich denke, daran wird sich dann nämlich nichts mehr ändern ;)

Vielen Dank nochmal, euch beiden!

Antworten