Aplicar formato a los paréntesis más externos

Aplicar formato a los paréntesis más externos

Tengo información de texto donde necesito aplicar un formato de texto a todos los paréntesis más externos, como hacerlos más grandes y/o en negrita.

En cierto sentido quiero procesar texto como

^(...(...(...)...)...(...)..^)...^(..(....)..^)

Donde ^( y ^) tienen formatos especiales (básicamente, todo lo que quiero hacer es resaltar los paréntesis más externos de algún texto matemático (pero no es texto matemático) para que sea más fácil de leer).

Se vería como

(...(...(...)...)...(..)..)...(..(....)..)

¿Alguna idea para hacer esto fácilmente? No quiero tener que agregar \mathbf a cada paréntesis ya que satura el texto.

(de hecho, me gustaría modificar el texto justo antes de *( y aplicarle un formato (solo la palabra anterior).

Entonces

Algún texto(....)

Se aplicaría un formato a SomeText y al exterior (), pero todo lo que está dentro permanecerá.

Quiero evitar saturar el texto tanto como sea posible y supongo que se necesita algún entorno.

Respuesta1

No me metería con los códigos cat, ya que nunca se conocen las implicaciones para otros paquetes, especialmente para matemáticas, sino que proporcionaría un pequeño analizador. El autor inserta la entrada como:

 \[\parser SomeWords (...(\alpha...(...)...)...(\beta)..)...(..(....)..);\]

Puedes darle un \parsersignificado más semántico si lo deseas; todo lo que se encuentre entre él y el primer corchete de apertura se escribe en negrita. Si la cadena no contiene matemáticas, puede omitir el archivo \[..\].

Analizamos el contenido entre el primer paréntesis de apertura y el último hasta el punto y coma, letra por letra utilizando el bucle del kernel LaTeX @tfor. Mantenemos un equilibrio entre los bucles exterior e interior y componemos en consecuencia. Aquí está el resultado:

ingrese la descripción de la imagen aquí

El MWE se muestra a continuación:

\documentclass{article}
\begin{document}
\makeatletter
\def\L{(}
\def\R{)}
%left counter
\newcounter{cnt}
\setcounter{cnt}{1}
%right counter
\newcounter{cntr}
\setcounter{cntr}{1}
%new counter balancing
\newcounter{bal}
\setcounter{bal}{0}
%define the parser
\def\parser#1(#2);{%
 \textbf{#1 (}
\@tfor\next:=#2\do{%
    \ifx\next\L \stepcounter{cnt}
      \stepcounter{bal}
      \ifnum\thebal=0 \textbf{\next}\else\normalfont\next\fi%
    %
   \else
    \ifx\next\R \stepcounter{cntr}
      \addtocounter{bal}{-1}   
       \ifnum\thebal=-1 \textbf{\next}\else\next\fi%
    \else
       \next
    \fi
  \fi
 }%end forloop
 \textbf{)}
}

\[\parser SomeWords (...(\alpha...(...)...)...(\beta)..)...(..(....)..);\]

\end{document}

Respuesta2

¿Quizás \lgroup/ \rgrouppara los paréntesis exteriores?

$$\lgroup a(b(c)) (d)\rgroup \lgroup e(fg) h\rgroup$$
\bye

ingrese la descripción de la imagen aquí

Para la macro, podrías usar los paréntesis como delimitadores de macro y un espacio como delimitador final (en el ejemplo, el cambio de línea cuenta como un espacio, es decir, un delimitador final):

\def\someFormat#1{{\it #1\/}}
\def\thingamabob#1(#2) {{\someFormat{#1}\mathsurround0pt$\lgroup$#2$\rgroup$}}
\thingamabob SomeText(blah(foo)bar) \thingamabob (bar(baz)foo(blah))
\bye

Está \mathsurround0ptahí solo para asegurarse de que no se agregue ningún espacio antes o después de los cambios en el modo matemático en caso de que esté configurado en >0, y el grupo circundante está ahí para contener esa configuración dentro de este comando.

Respuesta3

A continuación se establece \important[<prefix>]{<stuff>}que las tipografíasprefijo(en negrita, modo texto) y rodea <stuff>con \big(y \big)como forma de acentuación. Alternativamente, también es posible un enfoque de estilo ambiental, proporcionado por grp(abreviatura de "grupo"):

ingrese la descripción de la imagen aquí

\documentclass{article}
\newcommand{\important}[2][]{\textbf{#1}\big(#2\big)}%
\newenvironment{grp}{\big(}{\big)}
\begin{document}
\[
  \important[SomeText]{\ldots(\ldots(\ldots)\ldots)\ldots(\ldots)\ldots}\ldots\important{\ldots(\ldots)\ldots}
\]

\[
  \textbf{SomeText}\begin{grp}\ldots(\ldots(\ldots)\ldots)\ldots(\ldots)\ldots\end{grp}\ldots\begin{grp}\ldots(\ldots)\ldots\end{grp}
\]
\end{document}

Respuesta4

Siguiendo la sugerencia anterior de @wh1t3, aquí hay una forma de definir un \outermostcomando que enfatiza cualquier texto antes del primer paréntesis de apertura y luego cada par de paréntesis más externos a partir de entonces. Debe aislarse en un bloque si no desea que los paréntesis se traten especialmente para el resto del código.

El código de énfasis se puede cambiar a lo que quieras: en particular, he asumido aquí que esto se usará en modo texto, por lo que usa \textbf, pero \mathbf(o tal vez el comando en negrita de un pobre para lidiar con los paréntesis) funcionaría si Quiero usar esto en modo matemático.

La principal virtud de este enfoque es que no se necesita marcado adicional en el texto que contiene paréntesis.

\documentclass{standalone} % for demonstration purposes

\makeatletter

\newcount\@nbegin % number of inner open parentheses in current block
\newcount\@nend   % number of outer open parentheses in current block

\newcommand\@outermostopen{%
  \@nbegin=0\@nend=0\relax%
  \@beginisinner\@endisouter%
  \@outermostem{(}}
\newcommand\@outermostclose{%
  \@outermostem{)}%
  \@beginisouter}
\newcommand\@inneropen{%
  (%
  \advance\@nbegin by 1\relax%
  \@endisinner}
\newcommand\@innerclose{%
  )%
  \advance\@nend by 1
  \ifnum\@nend=\@nbegin%
  \@endisouter\fi%
}

\def\outermost#1({%
  \catcode`(=\active
  \catcode`)=\active
  \@outermostem{#1}\@outermostopen%
}


{ % Commands that redefine parentheses themselves need to be defined
  % in a context where () are active
  \catcode`(=\active
  \catcode`)=\active
  \gdef\@beginisouter{%
    \def({\@outermostopen}%
  }
  \gdef\@beginisinner{%
    \def({\@inneropen}%
  }
  \gdef\@endisouter{%
    \def){\@outermostclose}%
  }
  \gdef\@endisinner{%
    \def){\@innerclose}%
  }
}

\newcommand{\@outermostem}[1]{\textbf{\Large #1}}
% redefine for whatever emphasis method you want
\makeatother

\begin{document}
{\outermost Beginning(\dots(\dots)\dots)\dots(\dots)\dots(\dots(\dots(\dots)\dots(\dots)\dots)\dots)}
\end{document}

lo que da

Salida de código de muestra

información relacionada