Простое решение

Простое решение

Я использую переменные для создания строк таким образом.

\newcommand{\myText}{2014/12/20}
\myText{}

Это работает отлично. Теперь я могу получить доступ к каждому отдельному символу этой строки (длина 10), потому что в других разделах моего документа я хочу получить только первые четыре буквы («2014») из нее, чтобы создать что-то новое.

решение1

Простое решение

Это можно сделать с помощью xstringпакета. В частности, \StrMid{string}{#2}{#3}команда позволяет взять подстроку строки из позиций символов #2через #3.

\documentclass{article}
\usepackage{xstring}
\newcommand{\myText}[2]{\StrMid{2014/12/20}{#1}{#2}}

\begin{document}
\myText{1}{4}
\end{document}

Что позволяет\myText{}

Однако приведенное выше решение всегда требует аргументов «за» \myText.

Кажется, вы хотите \myText{}получить всю строку 2014/12/20. Поэтому мы можем сделать первый параметр необязательным (по умолчанию он равен первой позиции, если не указан в скобках), а второй параметр — второй позиции. Мы настраиваем условие так, что если вторая позиция пуста, мы просто получаем всю строку.

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

решение2

С stringstringsпосылкой.

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

введите описание изображения здесь


Альтернатива пакету listofitems, настроенному здесь для разбора входной строки на основе разделителя /.

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

введите описание изображения здесь

решение3

Решение на основе LuaLaTeX, которое создает макрос TeX с именем, \substringпринимающий три аргумента.

Первый аргумент макроса \substring— строка. Это может быть либо жестко закодированная строка, либо макрос TeX, который создает строку. Например, если \myTextопределено через \newcommand{\myText}{2014/12/20}, то \myTextможет использоваться как первый аргумент \substring.

Второй и третий аргументы — начальный и конечный индексы подстроки и предполагаются целыми числами. Пожалуйста, укажите, если это предположение неверно.

введите описание изображения здесь

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

Связанный контент