가능한 중복:
데이트는 어떻게 나누나요?
자신의 매크로 매개변수에서 날짜로부터 연도를 추출하는 방법을 아는 사람이 있습니까?
즉,
\themacro#1{...}
여기에 #1
이미 형식이 지정된 날짜 yyyy
나 형식이 포함되어 있으면 일반 형식으로 변환 dd.mm.yyyy
됩니다 .\themacro
yyyy
간단하게 말하면 날짜에서 연도만 추출하면 됩니다(추출이 필요한 경우).
답변1
user1189687은 이미 내가 생각하기에 더 나은 솔루션을 제안했지만 이미 이 글을 쓰기 시작했기 때문에 일반 tex 솔루션을 원하는 경우 다음과 같습니다.
여기서 중요한 점은 당신이 전자의 경우인지 아니면 후자의 경우인지를 인식하는 것입니다. 입력 형식을 알고 있으면 수행하기가 쉽습니다. 하지만 여기서는 그렇지 않은 것 같습니다.
그래서 내가 할 일은 다음과 같습니다.
\makeatletter
\def\@themacro #1.#2\end@themacro{%
\def\@tempyr{#1}%
\def\@temprem{#2}%
}%
%
\def\themacro #1 {%
\let\day\relax%
\let\month\relax%
\let\year\relax%
\let\@tempyr\relax%
\let\@temprem\relax%
\@themacro#1.\relax\end@themacro% get day or year
\if\relax\@temprem\relax%
\if\relax\@tempyr\relax%
\GenericError{}{Wrong date format}{}{}% Manage the error
\else%
\edef\year{\expandafter\noexpand\@tempyr}%
\fi%
\else%
\edef\day{\expandafter\noexpand\@tempyr}%
\expandafter\@themacro\@temprem\end@themacro% get month
\if\relax\@temprem\relax%
\GenericError{}{Wrong date format}{}{}% Manage the Error
\else%
\edef\month{\expandafter\noexpand\@tempyr}%
\expandafter\@themacro\@temprem\end@themacro% get year
\if\relax\@temprem\relax%
\edef\year{\expandafter\noexpand\@tempyr}%
\else%
\GenericError{}{Wrong date format}{}{}% Manage the Error
\fi%
\fi%
\fi%
}%
\makeatother%
이 솔루션의 장점은 잘못된 구문을 감지하여 원하는 대로 대체하거나 오류를 발생시킬 수 있다는 것입니다.
아, 잊어버릴 뻔했어요... 물론 의 대체 텍스트로 연도를 얻습니다 \year
.
존재하는 경우 \day
및 을 얻을 수도 있습니다 \month
.
답변2
\StrRight
패키지 를 사용해 보십시오 xstring
.
\documentclass{article}
\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}
\begin{document}
\noindent\getYear{12.12.2012}\\
\getYear{2012}
\end{document}
결과는 다음과 같습니다.