Auf den ersten Blick wirkt es für mich sehr praktisch, meine Makros für mathematische Ausdrücke alle mit \ensuremath zu definieren, wie vereinfacht hier:

\documentclass{article}
\newcommand{\tx}{\ensuremath{\tilde{x}}}
\begin{document}
Die Gleichung $\tx=\lim_{n\rightarrow\infty} x_n$ bestimmt \tx.
\end{document}

Ausgabe des klzzwxh:0001nsuremath-Beispiels

Dadurch lassen sich die Makros sowohl im Mathematikmodus als auch im Fließtext verwenden. Ich brauche weniger zu schreiben, gehe möglichen Fehlern durch fehlende $ aus dem Weg und mir passiert auch ohne Compilerfehler nicht, dass eine Variable wie x aufrecht statt kursiv auftaucht.

Kann \ensuremath möglicherweise Nachteile haben, oder kann ich es unbesorgt stets verwenden?

gefragt 22 Jun '13, 21:51

jan12's gravatar image

jan12
770272732
Akzeptiert-Rate: 100%

Ich sehe darin keinen Nachteil, denn dafür wurde es ja implementiert. Aber schau auch mal hier: http://tex.stackexchange.com/questions/34830/when-not-to-use-ensuremath-for-math-macro

(22 Jun '13, 21:54) Johannes

\ensuremath macht überall dort Sinn, wo man im laufenden Text (inline) mathematische Symbole verwendet und dazu dann jedesmal in den Mathematikmodus wechseln müsste, beispielsweise bei den griechischen Buchstaben, die man sich als Unicodezeichen definieren könnte:

\documentclass[ngerman]{article}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\usepackage{bm}
\newcommand{\degree}{\ensuremath{^\circ}}
\DeclareUnicodeCharacter{B0}{\degree}
\newunicodechar{ɑ}{\ensuremath{\alpha}}
\newunicodechar{β}{\ensuremath{\beta}}
\newunicodechar{𝜶}{\ensuremath{\bm{\alpha}}}
\newcommand*\ungleich{\ensuremath{\ne}}
\begin{document}
$7^{°}$ 7\degree $7\degree$

\huge$ɑ + 𝜶 \ne β$ ɑ + 𝜶 \ungleich\ β

\end{document}

Bei echten mathematischen Ausdrücken sollte man aber lieber explizit $...$ benutzen.

Permanenter link

beantwortet 23 Jun '13, 13:23

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

Edit: Aus den Kommentaren geht hervor, dass ich mich in meinem Eifer, Enrico Gregorios Kampange gegen die Verwendung von ensuremath{} wo es keinen zusätzlichen Nutzen bringt zu unterstützen, offenbar nicht klar genug ausgedrückt habe. An sich richtet \ensuremath{} keinen Schaden an. Es gibt im Gegenteil eine Reihe von Anwendungsbeispielen, wo es durchaus von Nutzen ist, etwa die Definition eines Befehls zum Setzen chemischer Summenformeln

\newcommand*\chem[1]{\ensuremath{\mathrm{#1}}}

oder bei Symbolen für ein Symbolverzeichnis mit glossaries oder acronym.

Wenn man sich aber Makros wie

\newcommand\tx{\ensuremath{\tilde{x}}}

definiert, dass einem nur ersparen soll, dauernd \tilde{x} zu schreiben (was grundsätzlich eine sehr gute Idee ist!), dann sehe ich den Vorteil nicht. Setzt man es im Text ein, so spart man sich ganze zwei Zeichen (zweimal $), verliert aber die klare Kennzeichnung von \tx als mathematisches Symbol im Quelltext und handelt sich zusätzlich die Gefahr ein, dass man vergisst, \tx\ oder \tx{} zu schreiben, damit das folgende Leerzeichen nicht verschluckt wird. Zudem verführt es dazu, faul zu sein und längere mathematische Ausdrücke nicht im Mathemodus zu schreiben, wo er aber unbedingt einzusetzen ist (etwa $\tx + \tx = n$ oder etwas dergleichen -- alles schon gesehen).

Das im Hinterkopf soll jeder selbst entscheiden, ob er \ensuremath verwenden mag oder nicht. :)


Originalantwort:

Meiner Meinung nach sollte man sich \ensuremath{} für Makros aufheben, die nichts mit Mathematik zu tun haben, aber den Mathe-Modus verwenden, z.B. ein einfaches Makro zum setzen chemischer Summenformeln

\newcommand*\chem[1]{\ensuremath{\mathrm{#1}}}

Für mathematische Symbole sollte man besser darauf verzichten und die Fehlermeldung, die man erhält, weil man \( ... \) vergessen hat, wohlwollend in Kauf nehmen. \ensuremath verführt sonst dazu, faul zu sein, und den expliziten Wechsel in den Mathe-Modus zu unterlassen. Zum einen ist dann aber im Quelltext nicht mehr klar, dass gerade ein mathematisches Symbol verwendet wurde (und sollte es bei LaTeX nicht auch um logisches Markup gehen?) und zum anderen können einem dann falsche oder auch einfach inkonsitente Abstände passieren:

\documentclass{article}
\usepackage{libertine}
\newcommand\tx{\ensuremath{\tilde{x}}}
\newcommand\txx{\tilde{x}}

\begin{document}

\noindent
\(\txx + \txx\)\\
\tx{} + \tx% ohne \ensuremath wäre das nicht passiert

\end{document}

Ergebnis

Permanenter link

beantwortet 23 Jun '13, 15:20

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 23 Jun '13, 20:03

wieso sind die inkonsistent? Meiner Meinung nach kann man die beiden Ausdrücke nicht vergleichen; im ersten Fall ist es ein mathematischer Ausdruck, im zweiten Fall aber zwei unabhängige und das + im Textmodus. Setze auch das zweite in \( ..\) und sie sind gleich.

(23 Jun '13, 15:33) Herbert

@Herbert ich würde Dir zustimmen, wenn der zweite Ausdruck als zwei unabhängige Matheaudrücke gedacht ist, mit einem Text-Plus dazwischen. Ich habe aber so meine Zweifel, ob das alle Anwender die so etwas setzen, das auch so meinen. \tx{} \(+\) \tx (mit oder ohne Plus im Mathe-Modus) hätte einen weiteren Nachteil: einen erlaubten Zeilenumbruch vor dem Plus... und außerdem wären es nun drei mathematische Audrücke, die aussehen wie einer. Das kann natürlich gewünscht sein :)

(23 Jun '13, 15:43) cgnieder

Mir wird gerade klar, dass ich Deinen Kommentar missverstanden habe... wenn ich aber sowieso \(\tx + \tx\) schreibe, wozu dann überhaupt \ensuremath verwenden?

(23 Jun '13, 15:47) cgnieder

Ich denke, wir sind uns ja einig, dass \ensuremath nur für einzelne Symbole/Zeichen Sinn macht, aber nicht für mathematische Ausdrücke, die müssen immer in $...$ oder \(...\) stehen, egal ob irgendwas darin mit \ensuremath definiert wurde oder nicht.

(23 Jun '13, 15:55) Herbert

@Herbert ja, da sind wir uns einig :) Und solange man sich daran hält, wird \ensuremath auch keinen Schaden anrichten.

(23 Jun '13, 16:02) cgnieder

Manchmal hat man aber auch keinen Einfluss darauf. Wenn man beispielsweise irgendwelche Symbole in einem Symbolverzeichnis mit glossaries ausgegeben haben will, muss man erst einmal wissen, wo dort der Mathemodus verwendet wird und wo nicht. Da ist es einfacher, wenn man die Symbole mit \ensuremath setzen lässt, wenn diese nach dem Mathemodus verlangen. In der Anleitung zum acronym-Paket ist sogar explizit ein Beispiel angegeben. Zwar könnte man in dem dort angegebenen Fall eventuell auch \textsubscript verwenden, in anderen Fällen wird man aber kaum ohne \ensuremath auskommen.

(23 Jun '13, 19:20) saputello

@saputello Stimmt. Aber das bestreite ich auch gar nicht. :) Ich meine nur, dass man sich auf die Fälle beschränken sollte, wo es nötig ist, und es sich nicht zur Gewohnheit machen, alle Symbole mit \ensuremath zu definieren. Dafür gibt es meiner Meinung nach nämlich keinen Grund. Da Frage war ja auch nicht, wo \ensuremath sinnvoll ist, sondern ob es Nachteile hat. Wenn ich aber etwas tatsächlich falsches geschrieben habe wie ich nach dem Downvote vermuten muss, würde ich gerne wissen, was?

(23 Jun '13, 19:27) cgnieder

@Clemens: Mir war die ursprüngliche Aussage schlicht zu absolut. Mir ist es weit lieber, wenn ein Anfänger etwas großzügig mit \ensuremath umgeht, als wenn er dadurch Fehler einbaut, dass er vermeintlich sorgfältig mit $…$ oder \(…\) (letzteres ist übrigens ohne amsmath nicht robust) arbeitet aber in seinem Anfängereifer schlicht übersieht, dass er in manchem Kontext so genau das Gegenteil von dem erreicht, was er beabsichtigt. Das geht eventuell schneller, als man vermutet. Die Verwendung von \ensuremath kann konsequenter sein als die Nichtverwendung & besser als $ in Definitionen!

(24 Jun '13, 08:28) saputello

@saputello ok, kann ich verstehen und nachvollziehen. Vielleicht baue ich die Antwort bezüglich Vorteilen von \ensuremath noch etwas aus...

(24 Jun '13, 12:22) cgnieder
Ergebnis 5 von 9 show 4 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×75

gestellte Frage: 22 Jun '13, 21:51

Frage wurde gesehen: 25,765 Mal

zuletzt geändert: 24 Jun '13, 12:22