Seite 1 von 1

Unterdrücken formaler Argumente innerhalb \newcommand

Verfasst: Sa 23. Feb 2019, 16:35
von Rolli
Hallo,

ich möchte mir ein Kommando basteln, welches eine Reihe von Einstellungen nach meinem Geschmack ändert. Dabei sind u.a. auch Dinge wie bsp. \emph, welches ja ein Argument hat. Mein untenstehendes Minimalbeispiel erzeugt natürlich einen Fehler beim Übersetzen, weil das formale Argument #1 für \myStandards nicht definiert ist.

Gibt es eine Möglichkeit, beim \renewcommand\emph das formale Argument #1 am Parser so vorbei zu schleusen, dass dieser es nicht expandiert, sondern als #1 an \emph weiter gibt?
\documentclass{scrartcl}
\usepackage{xcolor}
\usepackage[fleqn]{amsmath}

\newcommand {\myStandards}
{
   \setlength{\mathindent} {1cm}
   \setlength{\itemsep}    {0pt}
   % ... und einiges Weiteres
   \renewcommand\emph[1]{{\color{blue}\textit{\textbf{#1}}}}
}   
\begin{document}
   Blablabla
\end{document}
Gruß vom Rolli

Verfasst: Sa 23. Feb 2019, 16:57
von Gast
Wenn ich die etwas umständlich formulierte Frage richtig verstehe, willst du wissen, wie man innerhalb von Befehlen, Befehle mit Argument definieren oder umdefinieren kann.

Bei der Definition von Befehlen innerhalb von Befehlen muss man die Anzahl der # bei jeder Schachtelungstiefe verdoppeln.

Verfasst: Sa 23. Feb 2019, 17:07
von Rolli
Danke für den schnellen Tipp, Gast.
Wie kann ich meine Frage einfacher formulieren?

Das mit dem ## kannte ich nicht. Also:
\documentclass{scrartcl}
\usepackage{xcolor}
\usepackage[fleqn]{amsmath}

\newcommand {\myStandards}
{
   \setlength{\mathindent} {1cm}
   \setlength{\itemsep}    {0pt}
   % ... und einiges Weiteres
   \renewcommand\emph[1]{{\color{blue}\textit{\textbf{##1}}}}
}
%\renewcommand\emph[1]{{\color{blue}\textit{\textbf{#1}}}}
\begin{document}
   Blablabla
   \emph{Blablabla}
\end{document}
Das übersetzt zwar ohne Fehler, tut aber nicht das Gewünschte - es ist lediglich kursiv, jedoch nicht fett und nicht blau.
Auskommentieren des \renewcommand\emph... außerhalb meines \myStandard hingegen funktioniert wie beabsichtigt.

???

Gruß vom Rolli

Verfasst: Sa 23. Feb 2019, 17:31
von Gast
Naja, so wie Du es jetzt definierst und nutzt, würde \myStandards den Befehl \emph umdefinieren, wenn \myStandards selbst aufgerufen wird.
\documentclass{scrartcl}
\usepackage{xcolor}
\usepackage[fleqn]{amsmath}

\newcommand {\myStandards}
{
   \setlength{\mathindent} {1cm}
   \setlength{\itemsep}    {0pt}
   % ... und einiges Weiteres
   \renewcommand\emph[1]{{\color{blue}\textit{\textbf{##1}}}}
}

\begin{document}
   Blablabla
   \emph{Blablabla}

\myStandards

   Blablabla
   \emph{Blablabla}
\end{document}
Solange das noch nicht passiert ist, wird auch an \emph nicht geschraubt.

TeX ist ja eine Makro-Expansions-Sprache. Die Effekte von Code passieren erst, wenn er (im richtigen Kontext) ausgeführt wird, in der Definition mit \newcommand wir kein Code ausgeführt, Du teilst LaTeX damit nur mit, dass jedes Vorkommen von \myStandards durch den Definitionscode ersetzt wird.

Verfasst: Sa 23. Feb 2019, 17:44
von Rolli
...
Wald und Bäume ...
vollkommen klar. Manche Dinge sind halt viel einfacher, als gedacht.
DANKE!
Gruß vom Rolli