Unterdrücken formaler Argumente innerhalb \newcommand

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

Markdown is OFF

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Unterdrücken formaler Argumente innerhalb \newcommand

von Rolli » Sa 23. Feb 2019, 17:44

...
Wald und Bäume ...
vollkommen klar. Manche Dinge sind halt viel einfacher, als gedacht.
DANKE!
Gruß vom Rolli

von Gast » Sa 23. Feb 2019, 17:31

Naja, so wie Du es jetzt definierst und nutzt, würde \myStandards den Befehl \emph umdefinieren, wenn \myStandards selbst aufgerufen wird.

Code: Alles auswählen

\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.

von Rolli » Sa 23. Feb 2019, 17:07

Danke für den schnellen Tipp, Gast.
Wie kann ich meine Frage einfacher formulieren?

Das mit dem ## kannte ich nicht. Also:

Code: Alles auswählen

\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

von Gast » Sa 23. Feb 2019, 16:57

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.

Unterdrücken formaler Argumente innerhalb \newcommand

von Rolli » Sa 23. Feb 2019, 16:35

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?

Code: Alles auswählen

\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

Nach oben