
Estoy usando variables para crear cadenas de esa manera.
\newcommand{\myText}{2014/12/20}
\myText{}
Esto funciona muy bien. Ahora puedo acceder a cada carácter de esta cadena (la longitud es 10), porque en otras secciones de mi documento solo quiero obtener las primeras cuatro letras ("2014") para crear algo nuevo.
Respuesta1
Solución simple
Esto se puede lograr con el xstring
paquete. En particular, el \StrMid{string}{#2}{#3}
comando le permite tomar la subcadena de una cadena desde posiciones de caracteres #2
hasta #3
.
\documentclass{article}
\usepackage{xstring}
\newcommand{\myText}[2]{\StrMid{2014/12/20}{#1}{#2}}
\begin{document}
\myText{1}{4}
\end{document}
permitiendo\myText{}
Sin embargo, la solución anterior siempre requiere argumentos a favor \myText
.
Parece que quieres \myText{}
darte la cadena completa 2014/12/20
. Entonces, podemos hacer que el primer parámetro sea opcional (el valor predeterminado es la primera posición si no se indica entre paréntesis), y el segundo parámetro es la segunda posición. Configuramos un condicional para que, si la segunda posición está vacía, obtengamos la cadena completa.
\documentclass{article}
\usepackage{xstring}
\newcommand{\myText}[2][1]{
\ifx\\#2\\
{2014/12/20}
\else
\StrMid{2014/12/20}{#1}{#2}
\fi
}
\begin{document}
\myText{}
\myText[1]{4} \quad
\myText[6]{7} \quad
\myText[9]{10} \quad
\myText{7} \quad
\myText[6]{10}
\end{document}
Respuesta2
Con el stringstrings
paquete.
\documentclass{article}
\usepackage{stringstrings}
\begin{document}
\def\x{2014/12/20}
\substring{\x}{1}{4}\par
\substring{\x}{6}{7}\par
\substring{\x}{9}{$}\par% The $ implies the last character of the string.
\end{document}
Alternativa con el listofitems
paquete, configurada aquí para analizar la cadena de entrada en función de un /
separador.
\documentclass{article}
\usepackage{listofitems}
\begin{document}
\def\x{2014/12/20}
\setsepchar[.]{/}
\readlist\mydate{\x}
The year is \mydate[1]\par
The month is \mydate[2]\par
The day is \mydate[3]\par
\end{document}
Respuesta3
Una solución basada en LuaLaTeX, que configura una macro TeX llamada \substring
que toma tres argumentos.
El primer argumento de la macro \substring
es una cadena. Puede ser una cadena codificada o una macro TeX que produce una cadena. Por ejemplo, si \myText
se define mediante \newcommand{\myText}{2014/12/20}
, entonces \myText
podría usarse como primer argumento de \substring
.
El segundo y tercer argumento son los índices inicial y final de la subcadena y se supone que son números enteros. Indique si esta suposición no es válida.
% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\substring[3]{%
\directlua{ tex.sprint ( string.sub ( "#1", #2, #3 ) ) } }
\begin{document}
\substring{2014/12/20}{1}{4}
\end{document}