
그런 식으로 문자열을 생성하기 위해 변수를 사용하고 있습니다.
\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
. 따라서 첫 번째 매개변수를 선택적으로 만들 수 있으며(괄호 안에 지정되지 않은 경우 기본값은 첫 번째 위치로 설정됨) 두 번째 매개변수는 두 번째 위치가 됩니다. 두 번째 위치가 비어 있으면 전체 문자열을 가져오도록 조건을 설정했습니다.
\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
세 개의 인수를 사용 하는 TeX 매크로를 설정하는 LuaLaTeX 기반 솔루션입니다 \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}