Saltar al contenido

Cambiar el color de las letras mayúsculas

Solución:

Puede hacerlo con una expresión regular, si tiene la cadena de entrada como argumento.

documentclassarticle
usepackagexparse
%usepackagel3regex % only with expl3 before June 2017
usepackagexcolor


ExplSyntaxOn
NewDocumentCommandcolorcap Oblue m 
 
  sheljohn_colorcap:nn  #1   #2 
 

tl_new:N l__sheljohn_colorcap_input_tl
cs_new_protected:Npn sheljohn_colorcap:nn #1 #2
 
  % store the string in a variable for usage with regex_replace_all:nnN
  tl_set:Nn l__sheljohn_colorcap_input_tl  #2 
  regex_replace_all:nnN
    ([A-Z]+)  % search a capital letter (or more)
    ctextcolorcB#1cE\cB\1cE  % replace the match with textcolor#1
   l__sheljohn_colorcap_input_tl
  tl_use:N l__sheljohn_colorcap_input_tl
 
ExplSyntaxOff

begindocument
colorcapOnce Upon a Time

colorcap[red]Once Upon a Time
enddocument

ingrese la descripción de la imagen aquí

Nota

La sintaxis de la cadena de reemplazo es un poco complicada, pero no difícil:

  • ctextcolor significa “la secuencia de control textcolor
  • cB significa “una abrazadera de apertura con su función normal de B⁣Grupo inicial
  • cE significa “una llave de cierre con su función normal de mi⁣Nd grupo

Por lo tanto, el texto de reemplazo se puede leer como

textcolor#1

dónde #1 es el argumento opcional para colorcap.

Una versión que también admite acentos, siempre que se ingresen de la manera “clásica” con una macro.

documentclassarticle
usepackagexparse
usepackagexcolor

ExplSyntaxOn
NewDocumentCommandcolorcap Oblue m 
 
  sheljohn_colorcap:nn  #1   #2 
 

tl_new:N l__sheljohn_colorcap_input_tl
cs_new_protected:Npn sheljohn_colorcap:nn #1 #2
 
  % store the string in a variable
  tl_set:Nn l__sheljohn_colorcap_input_tl  #2 
  regex_replace_all:nnN
    % search a capital letter (or more)
     ([A-Z]+
    % replace the match with textcolor#1
     ctextcolorcB#1cE\cB\1cE 
    l__sheljohn_colorcap_input_tl
  tl_use:N l__sheljohn_colorcap_input_tl
 
ExplSyntaxOff

begindocument
colorcap`Once rUpon a Time

colorcap[red]Once Upon a Time
enddocument

ingrese la descripción de la imagen aquí

Aquí cC. coincide con cualquier secuencia de control, ? cero o una llave abierta, ? cero o una llave cerrada, por lo que ambos `O y rU se capturan las entradas.

Esta solución muestra un enfoque de carácter activo, que (aunque pesado en la configuración) permitirá que uno tenga la letra mayúscula coloreada automáticamente. Pero debido a que las letras activas tenderán a romper las macros, proporciono los medios para desactivarlas. Esta solución revisada proporciona las siguientes macros:

capcoloron[color] convierte todas las letras mayúsculas a este color (rojo predeterminado)

capcoloroff desactiva los caracteres activos y restaura las definiciones originales de letras mayúsculas

coloronlettercolor convierte solo esto [inactive] letra activa y la establece en el color especificado

coloroffletter apaga solo este carácter activo y restaura su definición original.

La única peculiaridad es que para cambiar el color de una letra mayúscula determinada que ya está activa, primero se debe apagar el color y luego volver a encenderlo. Aquí está mi MWE:

documentclassarticle
usepackagexcolor
usepackagestringstrings

letsva Aletsvb Bletsvc Cletsvd Dletsve Eletsvf Fletsvg G
letsvh Hletsvi Iletsvj Jletsvk Kletsvl Lletsvm Mletsvn N
letsvo Oletsvp Pletsvq Qletsvr Rletsvs Sletsvt Tletsvu U
letsvv Vletsvw Wletsvx Xletsvy Yletsvz Z
catcode`A=activecatcode`B=activecatcode`C=activecatcode`D=active
catcode`E=activecatcode`F=activecatcode`G=activecatcode`H=active
catcode`I=activecatcode`J=activecatcode`K=activecatcode`L=active
catcode`M=activecatcode`N=activecatcode`O=activecatcode`P=active
catcode`Q=activecatcode`R=activecatcode`S=activecatcode`T=active
catcode`U=activecatcode`V=activecatcode`W=activecatcode`X=active
catcode`Y=activecatcode`Z=active
newcommandcolorcapon[1][red]%
  catcode`A=activedef Atextcolor#1sva%
  catcode`B=activedef Btextcolor#1svb%
  catcode`C=activedef Ctextcolor#1svc%
  catcode`D=activedef Dtextcolor#1svd%
  catcode`E=activedef Etextcolor#1sve%
  catcode`F=activedef Ftextcolor#1svf%
  catcode`G=activedef Gtextcolor#1svg%
  catcode`H=activedef Htextcolor#1svh%
  catcode`I=activedef Itextcolor#1svi%
  catcode`J=activedef Jtextcolor#1svj%
  catcode`K=activedef Ktextcolor#1svk%
  catcode`L=activedef Ltextcolor#1svl%
  catcode`M=activedef Mtextcolor#1svm%
  catcode`N=activedef Ntextcolor#1svn%
  catcode`O=activedef Otextcolor#1svo%
  catcode`P=activedef Ptextcolor#1svp%
  catcode`Q=activedef Qtextcolor#1svq%
  catcode`R=activedef Rtextcolor#1svr%
  catcode`S=activedef Stextcolor#1svs%
  catcode`T=activedef Ttextcolor#1svt%
  catcode`U=activedef Utextcolor#1svu%
  catcode`V=activedef Vtextcolor#1svv%
  catcode`W=activedef Wtextcolor#1svw%
  catcode`X=activedef Xtextcolor#1svx%
  catcode`Y=activedef Ytextcolor#1svy%
  catcode`Z=activedef Ztextcolor#1svz%

defcolorcapoff%
  catcode`A=11let Asva%
  catcode`B=11let Bsvb%
  catcode`C=11let Csvc%
  catcode`D=11let Dsvd%
  catcode`E=11let Esve%
  catcode`F=11let Fsvf%
  catcode`G=11let Gsvg%
  catcode`H=11let Hsvh%
  catcode`I=11let Isvi%
  catcode`J=11let Jsvj%
  catcode`K=11let Ksvk%
  catcode`L=11let Lsvl%
  catcode`M=11let Msvm%
  catcode`N=11let Nsvn%
  catcode`O=11let Osvo%
  catcode`P=11let Psvp%
  catcode`Q=11let Qsvq%
  catcode`R=11let Rsvr%
  catcode`S=11let Ssvs%
  catcode`T=11let Tsvt%
  catcode`U=11let Usvu%
  catcode`V=11let Vsvv%
  catcode`W=11let Wsvw%
  catcode`X=11let Xsvx%
  catcode`Y=11let Ysvy%
  catcode`Z=11let Zsvz%

newcommandcoloron[2]%
  ifsva#1catcode`A=activedef Atextcolor#2svaelse%
  ifsvb#1catcode`B=activedef Btextcolor#2svbelse%
  ifsvc#1catcode`C=activedef Ctextcolor#2svcelse%
  ifsvd#1catcode`D=activedef Dtextcolor#2svdelse%
  ifsve#1catcode`E=activedef Etextcolor#2sveelse%
  ifsvf#1catcode`F=activedef Ftextcolor#2svfelse%
  ifsvg#1catcode`G=activedef Gtextcolor#2svgelse%
  ifsvh#1catcode`H=activedef Htextcolor#2svhelse%
  ifsvi#1catcode`I=activedef Itextcolor#2svielse%
  ifsvj#1catcode`J=activedef Jtextcolor#2svjelse%
  ifsvk#1catcode`K=activedef Ktextcolor#2svkelse%
  ifsvl#1catcode`L=activedef Ltextcolor#2svlelse%
  ifsvm#1catcode`M=activedef Mtextcolor#2svmelse%
  ifsvn#1catcode`N=activedef Ntextcolor#2svnelse%
  ifsvo#1catcode`O=activedef Otextcolor#2svoelse%
  ifsvp#1catcode`P=activedef Ptextcolor#2svpelse%
  ifsvq#1catcode`Q=activedef Qtextcolor#2svqelse%
  ifsvr#1catcode`R=activedef Rtextcolor#2svrelse%
  ifsvs#1catcode`S=activedef Stextcolor#2svselse%
  ifsvt#1catcode`T=activedef Ttextcolor#2svtelse%
  ifsvu#1catcode`U=activedef Utextcolor#2svuelse%
  ifsvv#1catcode`V=activedef Vtextcolor#2svvelse%
  ifsvw#1catcode`W=activedef Wtextcolor#2svwelse%
  ifsvx#1catcode`X=activedef Xtextcolor#2svxelse%
  ifsvy#1catcode`Y=activedef Ytextcolor#2svyelse%
  ifsvz#1catcode`Z=activedef Ztextcolor#2svzelse%
  fifififififififififififififififififififififififififi%

newcommandcoloroff[1]catcode`#1=11%
  edeftmpdetokenize#1%
  caselower[q]tmp%
  expandafterletexpandafter#1csname svthestringendcsname%

catcode`A=11catcode`B=11catcode`C=11catcode`D=11catcode`E=11
catcode`F=11catcode`G=11catcode`H=11catcode`I=11catcode`J=11
catcode`K=11catcode`L=11catcode`M=11catcode`N=11catcode`O=11
catcode`P=11catcode`Q=11catcode`R=11catcode`S=11catcode`T=11
catcode`U=11catcode`V=11catcode`W=11catcode`X=11catcode`Y=11
catcode`Z=11

parskip 1em

begindocument

colorcapon[cyan]
verb|colorcapon[color]| will change all caps to the specified color\
A Test of The Active Method (verb|Even in Verbatim|)

colorcapoff
verb|colorcapoff| will restore all things to the original LaTeX setting\
A Test of The Active Method

coloronMbluecoloronAredcoloronTorange
verb|coloronlettercolor| will turn an inactive letter active with the
specified color, done here to letters ``M'', ``A'', and ``T'':\
A Test of The Active Method

coloroffA
verb|coloroffletter| will restore that letter to the original LaTeX
setting, here done to the letter ``A'':\
A Test of The Active Method

To change The color an already active letter, one must first turn the color off
and then set the color anew, as done here to the letter ``T'':\
coloroffTcoloronTgreen
A Test of The Active Method
enddocument

ingrese la descripción de la imagen aquí


SOLUCIÓN ORIGINAL:

Esto muestra lo tradicional y peligroso enfoque de carácter activo. El enfoque activo requiere una buena cantidad de código de “configuración”, pero luego cambiará automáticamente los colores de las letras mayúsculas cuando se use.

Porque es peligroso, Proporciono los medios para entrar y salir del enfoque activo con colorcapon y colorcapoff. Solo configuré 3 letras … pero las otras 23 siguen de manera similar.

documentclassarticle
usepackagexcolor
begindocument
TRADITIONAL APPROACH:

textcolorredA letter can have its color textcolorblue!60Changed
with the textcolorcyan!80Use of verb|textcolor|.vspace2em

ACTIVE CHARACTER APPROACH

letsva A
letsvc C
letsvu U
catcode`A=active
catcode`C=active
catcode`U=active
defcolorcapon%
  catcode`A=activedef Atextcolorredsva%
  catcode`C=activedef Ctextcolorblue!60svc%
  catcode`U=activedef Utextcolorcyan!80svu%

defcolorcapoff%
  catcode`A=11let Asva%
  catcode`C=11let Csvc%
  catcode`U=11let Usvu%

catcode`A=11
catcode`C=11
catcode`U=11

colorcapon
A letter can have its color Changed with the Use of\
verb|textcolor.  Wow.  And I can Use it in verbatim|.vspace2emcolorcapoff


RESTORED TO ORIGINAL

A letter can have its color Changed with the Use of verb|textcolor|.

enddocument

ingrese la descripción de la imagen aquí

Este es un fragmento programado en LuaLaTeX, un nuevo comando capme toma el argumento, usa Lua y convierte los caracteres preseleccionados a través de expresiones regulares y unicode.utf8.gsub función a un nuevo comando colorme. Traté de implementar el cambio de palabras comunes, así como marcar una (palabras precedidas por un { carta, p. ej. textitŇouma). He ampliado una serie común de letras mayúsculas (de la A a la Z) con algunas letras con signos diacríticos para demostrar su característica adicional.

He encontrado una manera de desobedecer noexpand comando que usé con frecuencia en mis ejemplos anteriores de LuaTeX. Estoy ampliando los comandos individuales en un grupo local, en este ejemplo es el textit mando. Sin embargo, necesitaría ejemplos y datos más complejos si esta es la forma correcta de ahorrar tiempo de escritura.

Corremos lualatex mal-capitalization.tex, Adjunto el archivo y una vista previa del resultado.

% lualatex mal-capitalization.tex
documentclass[a4paper]article
%usepackagefontspec % It also loads Latin Modern.
%usepackageluacode
usepackageluatextra % a recommended way of loading luacode (and fontspec) package
pagestyleempty
usepackagexcolor

begindocument
beginluacode*
selection="[%uČĎŇŘŠŤŽ]" -- the characters we consider to be coloured
function capme(text)
text=" "..text -- the first letter of a string is also considered for change
text=unicode.utf8.gsub(text, "([%s{])("..selection..")", "%1\colorme%2")
text=unicode.utf8.sub(text,2) -- delete that extra space
print(text) -- a new text written to the terminal
tex.print(text) -- deliver the result back to TeX
end -- function capme
endluacode*

defcapme#1%
    % We neither need noexpandtextit nor noexpand#1 and \textit.
    begingroup % Let's redefining begin!
    letoldtextit=textit
    deftextit##1noexpandoldtextit##1
    directluacapme([[#1]])
      endgroup % textit returns to its common definition.
    
defcolorme#1colorredbfseries#1

% A small demonstration of using it.
Hello World! capmeHello Capitalized WORLD! 
Several words with diacritics: capmeČenich. textitŇouma. 
Ďagilev. Šiška. Živočich. I'm back in textitcommon text.
enddocument

Este es un ejemplo del uso de este fragmento: palabras comunes y varias palabras que comienzan con una letra diacrítica.

Recuerda comunicar este escrito si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *