Setzen Sie mathematische Ausdrücke in Klammern, wenn sie Operatoren enthalten

Setzen Sie mathematische Ausdrücke in Klammern, wenn sie Operatoren enthalten

Stellen Sie sich vor, ich habe mehrere Brüche in dieser Form geschrieben $\frac{V+W}{U}$und entscheide später, dass ich sie stattdessen als durchgestrichene Brüche anzeigen lassen möchte. In der Gruppe, in der ich dies möchte, kann ich immer Folgendes tun \renewcommand\frac[2]{#1/#2}. Ich möchte jedoch dem Zähler (oder dem Nenner) Klammern hinzufügen.nur wennes enthält ein mathop. Zumindest scheint mir dies eine geeignete erste Heuristik zu sein, um zu entscheiden, ob der Zähler (Nenner) eingeklammert werden soll oder nicht.

Weiß jemand, wie das erreicht wird?

Antwort1

Hier suche ich nach +, -, \bullet, und \cdot, aber Sie können der \setsepcharListe weitere Operatoren hinzufügen.

Wenn der Operator am Anfang steht, wie zum Beispiel -3, füge ich auch keine Klammern hinzu. Sie können das ändern, indem Sie die Zeile kommentieren \ignoreemptyitems.

BEARBEITET, um einen seltsamen Fehler zu umgehen, wenn \simallein als Argument für erscheint \inlinefrac.

\documentclass{article}
\usepackage{listofitems}
\newcommand\inlinefrac[2]{
  \setsepchar{+||-||\bullet||\cdot||\oplus}
  \ignoreemptyitems
  \readlist*\xator{ #1}
  \ifnum\listlen\xator[]>1\relax(#1)\else{#1}\fi
  /
  \readlist*\xator{ #2}
  \ifnum\listlen\xator[]>1\relax(#2)\else{#2}\fi
}
\begin{document}
\[
  \frac{2}{3}\quad\let\frac\inlinefrac\frac{2}{3}
\]
\[
  \frac{2}{-3}\quad\let\frac\inlinefrac\frac{2}{-3}
\]
\[
  \frac{2+x}{3}\quad\let\frac\inlinefrac\frac{2+x}{3}
\]
\[
  \frac{2\bullet x}{3\cdot y}\quad\inlinefrac{2\bullet x}{3\cdot y}
\]
\centering$\inlinefrac{M\oplus N}{\sim}$
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Ich schlage einen \ifracBefehl vor. Wenn *er mit angegeben wird, wird aufgerufen \inlinefrac, er befolgt aber auch die durch \fractionsinline(lokale Einstellung) vorgenommene Einstellung.

Auf diese Weise können Sie ganz einfach von einer Form zur anderen wechseln, indem Sie hinzufügen oder entfernen *. Sie können auch \inlinefracdirekt verwenden.

Die Symbole, die die Klammern auslösen, müssen im Zähler und im Nenner nicht dieselben sein: Multiplikationssymbole sollten Klammern nur im Nenner auslösen.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\ifrac}{smm}
 {
  \IfBooleanTF { #1 }
   { \inlinefrac { #2 } { #3 } }
   {
    \bool_if:NTF \l_bubaya_frac_inline_bool
     {
      \inlinefrac { #2 } { #3 }
     }
     {
      \frac { #2 } { #3 }
     }
   }
 }

\bool_new:N \l_bubaya_frac_inline_bool

% extend the regex at will; \+ and \- stand for + and -,
% \c{command name} for a control sequence
\regex_const:Nn \c_bubaya_frac_num_regex { \+ | \- | \c{sin} | \c{cos} }
\regex_const:Nn \c_bubaya_frac_den_regex { \c{cdot} | \c{times} | \c{bullet} }

\NewDocumentCommand{\fractionsinline}{}
 {
  \bool_set_true:N \l_bubaya_frac_inline_bool
 }

\NewDocumentCommand{\inlinefrac}{mm}
 {
  \regex_match:NnTF \c_bubaya_frac_num_regex { #1 } { (#1) } { #1 }
  /
  \regex_match:NnTF \c_bubaya_frac_num_regex { #2 }
   {
    (#2)
   }
   {
    \regex_match:NnTF \c_bubaya_frac_den_regex { #2 } { (#2) } { #2 }
   }
 }

\ExplSyntaxOff

\begin{document}
\begin{gather*}
  \ifrac{2}{3}\qquad\ifrac*{2}{3}
\\
  \ifrac{2}{-3}\qquad\ifrac*{2}{-3}
\\
  \fractionsinline
  \ifrac{2}{-3}\qquad\ifrac{2}{-3}
\\
  \inlinefrac{2+x}{3}
\\
  \ifrac{\sin x}{x}\qquad\ifrac*{\sin x}{x}
\\
\end{gather*}

\fractionsinline
\begin{gather*}
  \ifrac{2+x}{3}
\\
  \ifrac{2\bullet x}{3\cdot y}
\\
  \ifrac{\sin x}{x}
\end{gather*}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Eine Alternative mit der gleichen Idee wie die Lösung von @Steven, aber durch Verwendung xstringeines Pakets.

\documentclass{article}
\usepackage{xstring}
\renewcommand\frac[2]{\IfSubStr{#1}{+}{(#1)}{\IfSubStr{#1}{-}{(#1)}{#1}}/\IfSubStr{#2}{+}{(#2)}{\IfSubStr{#2}{-}{(#2)}{#2}}}
\begin{document}
\(\frac{5}{10}=0.5\) but \(\frac{5+1}{10}=0.6\) and \(\frac{7}{10+4}=0.5\) but \(\frac{14+1}{6+1.5}=2\)
\end{document}

Bildbeschreibung hier eingeben

PS: Ich schlage Stevens Lösung vor, da sie für mehr Fälle einfacher zu erweitern ist, hatte diesen Code aber bereits erstellt, bevor ich seine Antwort gesehen und ihn deshalb gepostet habe.

verwandte Informationen