Ich möchte den Befehl
usw. Das ganze soll für eine gewisse Anzahl von Buchstaben erfolgen, z.B. für N, Q, R. Für alle anderen Buchstaben soll der Befehl so bleiben, wie er ist. Ich kann leider kein lauffähiges Beispiel erstellen, deswegen als Pseudobeispiel: Open in Online-Editor
\documentclass[12pt]{beamer} \usepackage{libertine} \usepackage[libertine,liby,slantedGreek]{newtxmath} \usepackage{ifthen} %%%% Pseudocode \renewcommand{\mathbb}[1]{% if (#1 = N) or (#1 = Q) or (#1 = R) {\vmathbb{#1}} else {\mathbb{#1}} } \begin{document} \[1\in \mathbb{N} \subset \mathbb{Z} \subset \mathbb{Q} \subset \mathbb{R}\] \end{document} Ergänzung der Frage: Ich habe die Antwort von Henri genommen und möchte die Sache nun für Open in Online-Editor
\documentclass{article} \usepackage{dsfont} % defines \mathds \usepackage{letltxmacro} \usepackage{xparse} \ExplSyntaxOn % Save the definition of \mathds \LetLtxMacro \dsfont_mathds:n \mathds % Redeclare \mathbb \RenewDocumentCommand \mathds { m } { \str_case:nnTF { #1 } { % if #1 matches N,Q,R use \vmathbb { N } { } { Q } { } { R } { } } { #1 % hier soll nur der Buchstabe ohne Formatierung ausgegeben werden } { % else use saved \mathbb \dsfont_mathds:n { #1 } } } \ExplSyntaxOff \begin{document} \[1\in \mathds{N} \subset \mathds{Z} \subset \mathds{Q} \subset \mathds{R}\] \end{document} Das klappt. Wenn ich nun aber die letzte Zeile zweimal schreibe, kommt ein Fehler:
Open in Online-Editor
\documentclass{article} \usepackage{dsfont} % defines \mathds \usepackage{letltxmacro} \usepackage{xparse} \ExplSyntaxOn % Save the definition of \mathds \LetLtxMacro \dsfont_mathds:n \mathds % Redeclare \mathbb \RenewDocumentCommand \mathds { m } { \str_case:nnTF { #1 } { % if #1 matches N,Q,R use \vmathbb { N } { } { Q } { } { R } { } } { #1 % hier soll nur der Buchstabe ohne Formatierung ausgegeben werden } { % else use saved \mathbb \dsfont_mathds:n { #1 } } } \ExplSyntaxOff \begin{document} \[1\in \mathds{N} \subset \mathds{Z} \subset \mathds{Q} \subset \mathds{R}\] \[1\in \mathds{N} \subset \mathds{Z} \subset \mathds{Q} \subset \mathds{R}\] \end{document} gefragt 05 Mär '16, 08:50 tom75 |
Mit Hilfe von Zunächst müssen wir die alte Definition von Open in Online-Editor
\LetLtxMacro \amsmath_mathbb:n \mathbb Dann können wir Open in Online-Editor
\RenewDocumentCommand \mathbb { m } { \str_case:nnTF { #1 } { % if #1 matches N,Q,R use \vmathbb { N } { } { Q } { } { R } { } } { \vmathbb { #1 } } { % else use saved \mathbb \amsmath_mathbb:n { #1 } } } Sollen noch weitere Buchstaben aus Ich hab aus deinem Beispiel mal alles entfernt, was für das Problem nicht wichtig ist. Open in Online-Editor
\documentclass{article} \usepackage{newtxmath} % defines \mathbb \usepackage{letltxmacro} \usepackage{xparse} \ExplSyntaxOn % Save the definition of \mathbb \LetLtxMacro \amsmath_mathbb:n \mathbb % Redeclare \mathbb \RenewDocumentCommand \mathbb { m } { \str_case:nnTF { #1 } { % if #1 matches N,Q,R use \vmathbb { N } { } { Q } { } { R } { } } { \vmathbb { #1 } } { % else use saved \mathbb \amsmath_mathbb:n { #1 } } } \ExplSyntaxOff \begin{document} \[1\in \mathbb{N} \subset \mathbb{Z} \subset \mathbb{Q} \subset \mathbb{R}\] \end{document} beantwortet 05 Mär '16, 11:16 Henri Herzlichen Dank. Funktioniert das obige nur mit der Ersetzung von Wie ist es, wenn ich nun andere Befehle ersetzen will, z.B.
(05 Mär '16, 11:28)
tom75
@Tom: Das Prinzip ist immer dasselbe. Desweiteren: Lies die Anleitung zu
(05 Mär '16, 13:36)
saputello
@saputello: Ich hatte die Anleitung schon gelesen aber entweder nicht verstanden oder im mache etwas falsch. Ich ergänze meine obige Frage dahingehend. In der Antwort von Henri ist mir auch die Notation
(05 Mär '16, 18:34)
tom75
@tom75 Henry verwendet expl3, eine »Programmiersprache«, die in
(05 Mär '16, 18:47)
cgnieder
|
Bevor ich die eigentliche Frage beantworte: ich würde Open in Online-Editor
\newcommand*\set[1]{\mathbb{#1}} und den dann konsequent einsetzen: Open in Online-Editor
\[ 1\in \set{N} \subset \set{Z} \subset \set{Q} \subset \set{R} \] Vielleicht sogar: Open in Online-Editor
\newcommand*\set[1]{\mathbb{#1}} \newcommand*\N{\set{N}} \newcommand*\Z{\set{Z}} \newcommand*\Q{\set{Q}} \newcommand*\R{\set{R}} ... \[ 1\in \N \subset \Z \subset \Q \subset \R \] Mit dieser Vorüberlegung definiere ich nun einen Befehl Open in Online-Editor
\documentclass[12pt]{beamer} \usepackage{libertine} \usepackage[libertine,liby,slantedGreek]{newtxmath} \usepackage{etoolbox} \newcommand*\set[1]{% \ifboolexpr{ test {\ifstrequal{#1}{N}} or test {\ifstrequal{#1}{Q}} or test {\ifstrequal{#1}{R}} } {\vmathbb{#1}} {\mathbb{#1}}% } \newcommand*\N{\set{N}} \newcommand*\Z{\set{Z}} \newcommand*\Q{\set{Q}} \newcommand*\R{\set{R}} \begin{document} \[ 1\in \N \subset \Z \subset \Q \subset \R \] \end{document} Eine bequemer erweiterbare Variante wäre, mit Open in Online-Editor
\documentclass[12pt]{beamer} \usepackage{libertine} \usepackage[libertine,liby,slantedGreek]{newtxmath} \usepackage{etoolbox} \newcommand*\vbbsets{} \forcsvlist{\listadd\vbbsets}{N,Q,R} \newcommand*\set[1]{% \ifinlist{#1}{\vbbsets} {\vmathbb{#1}} {\mathbb{#1}}% } \newcommand*\N{\set{N}} \newcommand*\Z{\set{Z}} \newcommand*\Q{\set{Q}} \newcommand*\R{\set{R}} \begin{document} \[ 1\in \N \subset \Z \subset \Q \subset \R \] \end{document} Falls es nicht anders geht, kann man die gleiche Methode wie in Henris Antwort anwenden: Open in Online-Editor
\documentclass[12pt]{beamer} \usepackage{libertine} \usepackage[libertine,liby,slantedGreek]{newtxmath} \usepackage{etoolbox,letltxmacro} \LetLtxMacro\savedmathbb\mathbb \newcommand*\vbbsets{} \forcsvlist{\listadd\vbbsets}{N,Q,R} \renewcommand*\mathbb[1]{% \ifinlist{#1}{\vbbsets} {\vmathbb{#1}} {\savedmathbb{#1}}% } \newcommand*\N{\mathbb{N}} \newcommand*\Z{\mathbb{Z}} \newcommand*\Q{\mathbb{Q}} \newcommand*\R{\mathbb{R}} \begin{document} \[ 1\in \N \subset \Z \subset \Q \subset \R \] \end{document} beantwortet 05 Mär '16, 14:27 cgnieder Diese Lösung ist gut, aber leider kann ich sie nicht anwenden. Ich habe eine TeX-Datei, die
(05 Mär '16, 18:39)
tom75
@tom75 Da bist Du prompt auf das Problem gestoßen, das man bekommt/bekommen kann, wenn man sich keine semantischen Befehle (im Beispiel
(05 Mär '16, 18:44)
cgnieder
@tom75 anderseits sollte es eine Sache von höchstens einer Minute sein, mit dem Editor und dessen Search&Replace-Funktion alle
(05 Mär '16, 18:50)
cgnieder
@Clemens: Natürlich hast du Recht, und dein Hinweis ist gut, denn für meine eigenen Dokumente kann ich das so umsetzen, wie du es vorschlägst. Im konkreten Fall geht das nicht, da mir die entsprechende Datei nicht zur Änderung zur Verfügung steht. (Oder anders ausgedrückt, ich darf keinen Buchstaben in der Datei verändern.)
(05 Mär '16, 18:53)
tom75
@tom75 Du kannst meine Antwort natürlich trotzdem verwenden, siehe den Edit, den ich gemacht habe.
(05 Mär '16, 19:03)
cgnieder
Ergebnis 5 von 6
show 1 more comments
|
Zur Nachfrage: ersetze
\RenewDocumentCommand \mathds { m }
mit\DeclareRobustCommand*\mathds[1]
. Es ist hier übrigens viel besser, statt eine Frage zu bearbeiten und damit nachträglich zu ändern und zu hoffen, dass Helfer das überhaupt bemerken, lieber eine neue Frage als Folgefrage zu stellen. Dort kann man ja auf die erste Frage verlinken, um den Kontext herzustellen.