Solución simple

Solución simple

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 xstringpaquete. En particular, el \StrMid{string}{#2}{#3}comando le permite tomar la subcadena de una cadena desde posiciones de caracteres #2hasta #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 stringstringspaquete.

\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}

ingrese la descripción de la imagen aquí


Alternativa con el listofitemspaquete, 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}

ingrese la descripción de la imagen aquí

Respuesta3

Una solución basada en LuaLaTeX, que configura una macro TeX llamada \substringque toma tres argumentos.

El primer argumento de la macro \substringes una cadena. Puede ser una cadena codificada o una macro TeX que produce una cadena. Por ejemplo, si \myTextse define mediante \newcommand{\myText}{2014/12/20}, entonces \myTextpodrí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.

ingrese la descripción de la imagen aquí

% !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}

información relacionada