Einfache Lösung

Einfache Lösung

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 #2bis 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 stringstringsPaket.

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

Bildbeschreibung hier eingeben


Alternativ können Sie mit dem listofitemshier 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}

Bildbeschreibung hier eingeben

Antwort3

Eine auf LuaLaTeX basierende Lösung, die ein TeX-Makro namens „“ einrichtet, \substringdas drei Argumente annimmt.

Das erste Argument des Makros \substringist 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}, \myTextkö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.

Bildbeschreibung hier eingeben

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

verwandte Informationen