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 \ifmmode
y \@ifstar
en 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 \DeclarePairedDelimiter
sus variantes \DeclarePairedDelimiterX
y \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}
Por cierto, este es, en mi opinión, un uso legítimo de \ensuremath
.