¿Cómo puedo esencialmente '\ensuremath' un \DeclarePairedDelimiter (de `mathtools`)?

¿Cómo puedo esencialmente '\ensuremath' un \DeclarePairedDelimiter (de `mathtools`)?

Estoy intentando crear un comando delimitador emparejado que funcione fuera del modo de texto. No pude lograr esto simplemente definiendo un nuevo comando con \ensuremath, así que recurrí al uso de \ifmmodey \@ifstaren su lugar; sin embargo, el código (que se proporciona a continuación) no se ejecuta como se esperaba. ¿Alguien sabe cómo lograr esto? (Preferiría que el comando se definiera mediante \DeclarePairedDelimitersus variantes \DeclarePairedDelimiterXy \DeclarePairedDelimiterXPP).

Me doy cuenta de que a menudo se considera una mala práctica confiar en código como \ensuremath, pero lo hago principalmente para la experiencia de aprendizaje de TeXnical.

\documentclass[12pt, reqno]{amsart}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\usepackage{mathtools}
\usepackage[version=3]{mhchem}

\makeatletter
\DeclarePairedDelimiterXPP{\conctext}[1]{\(}{\lbrack}{\rbrack}{\)}{\ce{#1}}
\DeclarePairedDelimiterX{\concmath}[1]{\lbrack}{\rbrack}{\ce{#1}}
\newcommand{\conc}{\ifmmode \@ifstar\concmath*\concmath
                    \else   \@ifstar\conctext*\conctext
                    \fi
}
\makeatother
\begin{document}
The molarity is calculated from \conc{NaOH}, \conc{H3O+}, and \conc{OH-}.
\end{document}

Respuesta1

Un enfoque más sencillo con xparse:

\documentclass[12pt, reqno]{amsart}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\usepackage{mathtools}
\usepackage[version=3]{mhchem}

\DeclarePairedDelimiter{\cebrack}{[}{]}
\NewDocumentCommand{\conc}{sO{}m}{%
  \IfBooleanTF{#1}
   {\ensuremath{\cebrack*{\ce{#3}}}}
   {\ensuremath{\cebrack[#2]{\ce{#3}}}}%
}

\begin{document}
The molarity is calculated from \conc{NaOH}, \conc{H3O+}, and \conc{OH-}.

Test: \conc{H3O+}, \conc*{H3O+}, \conc[\big]{H3O+}, \conc[\Big]{H3O+}.

Test: $\conc{H3O+}, \conc*{H3O+}, \conc[\big]{H3O+}, \conc[\Big]{H3O+}$.

\end{document}

ingrese la descripción de la imagen aquí

Por cierto, este es, en mi opinión, un uso legítimo de \ensuremath.

información relacionada