Pregunta

Estoy buscando una manera de reemplazar una subcadena en una cadena en LaTeX.Lo que me gustaría hacer es crear un comando que pueda llamar así:

\replace{File,New}

y eso generaría algo como

\textbf{File}$\rightarrow$\textbf{New}

Este es un ejemplo simple, pero me gustaría poder poner formato/estructura en un solo comando en lugar de en todas partes del documento.Sé que podría crear varios comandos que tomen un número cada vez mayor de parámetros, pero espero que haya una manera más sencilla.

Editar para aclarar

Estoy buscando un equivalente de

string.replace(",", "$\rightarrow$)

algo que puede tomar una cadena arbitraria y reemplazar una subcadena con otra subcadena.

Entonces podría llamar al comando con eplace{Archivo}, eplace{Archivo,Nuevo}, eplace{Archivo,Opciones,Usuario}, etc., ajustar las palabras con formato en negrita y reemplazar las comas con el comando de flecha hacia la derecha. .Incluso si el bit "ajustar con negrita" es demasiado difícil (como creo que podría ser), solo la parte de reemplazo sería útil.

¿Fue útil?

Solución

El caso general es bastante más complicado (cuando no usas comas como separadores), pero el ejemplo que diste se puede codificar sin demasiados problemas con algunos conocimientos de las partes internas de LaTeX.

\documentclass[12pt]{article}
\makeatletter
\newcommand\formatnice[1]{%
  \let\@formatsep\@formatsepinit
  \@for\@ii:=#1\do{%
    \@formatsep
    \formatentry{\@ii}%
  }%
}
\def\@formatsepinit{\let\@formatsep\formatsep}
\makeatother
\newcommand\formatsep{,}
\newcommand\formatentry[1]{#1}
\begin{document}
\formatnice{abc,def}

\renewcommand\formatsep{\,$\rightarrow$\,}
\renewcommand\formatentry[1]{\textbf{#1}}
\formatnice{abc,def}
\end{document}

Otros consejos

parece que su problema de "espacios" se debe a un error en ese paquete.Si rodea la macro "\GetTokens" con, digamos, comas, verá que esa macro inserta el espacio adicional.

Sí, hay errores en el paquete tokenizer.Como dije en mi Blog, la corrección del error consiste en utilizar el siguiente código de corrección en lugar de simplemente "\usepackage[trim]{tokenizer}":

\usepackage[trim]{tokenizer}  

\def\SH@GetTokens#1,#2\@empty{%
    \def\SH@token{#1}%
    \ifx\SH@trimtokens\SH@true% strip spaces if requested
        \TrimSpaces\SH@token%
    \fi%
    \SH@DefineCommand{\SH@FirstArgName}{\SH@token}%
    \SH@DefineCommand{\SH@SecondArgName}{#2}%
    }
\def\SH@CheckTokenSep#1,#2\@empty{%
    \def\SH@CTSArgTwo{#2}%
    \ifx\SH@CTSArgTwo\@empty%
        \edef\SH@TokenValid{\SH@false}%
    \else%
        \edef\SH@TokenValid{\SH@true}%
    \fi%
    }

Informaré de esta corrección de error al desarrollador. Sascha Herpers

Hay un paquete LaTeX llamado tokenizador que puede ayudarte a hacer lo que quieras.

Aquí hay un truco (pero LaTeX puro, sin componentes internos) que se acerca a lo que creo que quieres, pero con algunos espacios superfluos que no he podido arreglar.Tal vez Robertson ¿Puede aconsejarme más?A diferencia de su respuesta un poco más pulida, no he parametrizado los fragmentos. Aquí va:

\usepackage{forloop}  
\usepackage[trim]{tokenizer}  
...  
\newcounter{rrCount}  
\newcommand{\replace}[1]{%  
    \GetTokens{rrFirst}{rrRest}{#1,}%  
    \textbf{\rrFirst}%  
    \forloop{rrCount}{0}{\value{rrCount} < 100}{%  
        \ifthenelse{\equal{\rrRest}{}}{%  
            \setcounter{rrCount}{101}%  
        }{%  
            \GetTokens{rrFirst}{rrRest}{\rrRest}%  
            $\rightarrow$\textbf{\rrFirst}%  
        }%  
    }%  
}%  
% -----------------------------------------------------------------  
\replace{a1}\\  
\replace{a2,b2}\\  
\replace{a3,b3,c3}\\  

Prueba el xstring paquete:

\usepackage{xstring}

[…]

\StrSubstitute{File,New}{,}{\(\rightarrow\)}

OK, retiro esta respuesta.Gracias por aclarar la pregunta.


Sospecho que esto puede no ser lo que quieres, pero aquí va de todos modos:

\newcommand{\replace}[2]{\textbf{#1}$\rightarrow$\textbf{#2}}  
\replace{File}{New}  

Si esto no es lo que estás buscando, ¿podrías aclarar la pregunta, por favor?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top