
我正在使用變數以這種方式創建字串
\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}