簡單的解決方案

簡單的解決方案

我正在使用變數以這種方式創建字串

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

相關內容