
Я использую переменные для создания строк таким образом.
\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}