
Estou usando variáveis para criar strings dessa forma
\newcommand{\myText}{2014/12/20}
\myText{}
Isso funciona muito bem. Agora posso acessar cada caractere desta string (o comprimento é 10), pois nas outras seções do meu documento quero obter apenas as primeiras quatro letras ("2014") dele, para criar algo novo.
Responder1
Solução Simples
Isso pode ser feito com o xstring
pacote. Em particular, o \StrMid{string}{#2}{#3}
comando permite que você pegue a substring da string das posições dos caracteres #2
até #3
.
\documentclass{article}
\usepackage{xstring}
\newcommand{\myText}[2]{\StrMid{2014/12/20}{#1}{#2}}
\begin{document}
\myText{1}{4}
\end{document}
Permitindo\myText{}
No entanto, a solução acima sempre requer argumentos para \myText
.
Parece que você deseja \myText{}
fornecer a string inteira 2014/12/20
. Portanto, podemos tornar o primeiro parâmetro opcional (o padrão é a primeira posição se não for fornecido entre colchetes) e o segundo parâmetro é a segunda posição. Configuramos uma condicional para que, se a segunda posição estiver vazia, obtenhamos apenas a string inteira.
\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}
Responder2
Com o stringstrings
pacote.
\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 ao listofitems
pacote, configure aqui para analisar a string de entrada com base em um /
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}
Responder3
Uma solução baseada em LuaLaTeX, que configura uma macro TeX chamada \substring
que recebe três argumentos.
O primeiro argumento da macro \substring
é uma string. Pode ser uma string codificada ou uma macro TeX que produz uma string. Por exemplo, se \myText
for definido via \newcommand{\myText}{2014/12/20}
, então \myText
poderá ser usado como o primeiro argumento de \substring
.
O segundo e o terceiro argumentos são os índices inicial e final da substring e são considerados inteiros. Indique se esta suposição não é 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}