
私は変数を使ってこのように文字列を作成しています
\newcommand{\myText}{2014/12/20}
\myText{}
これはうまく機能します。これで、この文字列 (長さは 10) のすべての文字にアクセスできるようになりました。ドキュメントの他のセクションでは、最初の 4 文字 ("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
。そこで、最初のパラメータをオプションにし(括弧で指定しない場合はデフォルトで最初の位置になります)、2 番目のパラメータを 2 番目の位置にします。2 番目の位置が空の場合は文字列全体を取得するように条件を設定します。
\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
\substring
3 つの引数を取る と呼ばれる TeX マクロを設定する LuaLaTeX ベースのソリューションです。
マクロの最初の引数\substring
は文字列です。これは、ハードコードされた文字列、または文字列を生成する TeX マクロのいずれかになります。たとえば、 が \myText
で定義されている場合\newcommand{\myText}{2014/12/20}
、 は\myText
の最初の引数として使用できます\substring
。
2 番目と 3 番目の引数は、部分文字列の開始インデックスと終了インデックスであり、整数であると想定されます。この想定が有効でない場合は、その旨をお知らせください。
% !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}