Ich verwende Variablen, um Zeichenfolgen auf diese Weise zu erstellen
\newcommand{\myText}{2014/12/20}
\myText{}
Das funktioniert super. Jetzt kann ich auf jedes einzelne Zeichen dieser Zeichenfolge zugreifen (Länge 10), da ich in anderen Abschnitten meines Dokuments nur die ersten vier Buchstaben („2014“) davon haben möchte, um etwas Neues zu erstellen.
Antwort1
Einfache Lösung
Dies kann mit dem Paket erreicht werden xstring
. Insbesondere \StrMid{string}{#2}{#3}
ermöglicht Ihnen der Befehl, die Teilzeichenfolge der Zeichenfolge von den Zeichenpositionen #2
bis zu übernehmen #3
.
\documentclass{article}
\usepackage{xstring}
\newcommand{\myText}[2]{\StrMid{2014/12/20}{#1}{#2}}
\begin{document}
\myText{1}{4}
\end{document}
Erlauben für\myText{}
Die obige Lösung erfordert jedoch immer Argumente für \myText
.
Es scheint, Sie möchten \myText{}
den gesamten String erhalten 2014/12/20
. Daher können wir den ersten Parameter optional machen (standardmäßig wird er an der ersten Position angezeigt, wenn er nicht in Klammern angegeben ist) und den zweiten Parameter an der zweiten Position. Wir richten eine Bedingung ein, sodass wir, wenn die zweite Position leer ist, einfach den gesamten String erhalten.
\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}
Antwort2
Mit dem stringstrings
Paket.
\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}
Alternativ können Sie mit dem listofitems
hier eingerichteten Paket die Eingabezeichenfolge anhand eines /
Trennzeichens analysieren.
\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}
Antwort3
Eine auf LuaLaTeX basierende Lösung, die ein TeX-Makro namens „“ einrichtet, \substring
das drei Argumente annimmt.
Das erste Argument des Makros \substring
ist ein String. Es kann entweder ein fest codierter String oder ein TeX-Makro sein, das einen String erzeugt. Wenn beispielsweise \myText
über definiert ist \newcommand{\myText}{2014/12/20}
, \myText
könnte als erstes Argument von verwendet werden \substring
.
Das zweite und dritte Argument sind die Start- und Endindizes der Teilzeichenfolge und werden als Ganzzahlen angenommen. Bitte geben Sie an, wenn diese Annahme nicht gültig ist.
% !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}