LINUX.ORG.RU

[LaTeX] Вывод произвольной даты.

 


0

0

Существует ли какая-то связка команд, позволяющая выводить заданную произвольно дату в формате текущей локализации?

Хочется что-то вроде

\printdate{1.1.2010}
и результата вида

1 января 2010 г.

Соответственно, если вдруг изменится локализация, к примеру, с русской на английскую, то данная команда должна выдать результат навроде

January 1, 2010

Команда \today не устраивает, т.к. выводит только дату текущую, а надо, бывает, произвольную вывести.



Последнее исправление: HolyBoy (всего исправлений: 1)

Ну так сделайте определение вроде

\def\printdate#1.#2.#3{
#1~\ifcase#2\or января\or февраля... \or декабря\fi~#3~г.
}
Для интернационализации см. определения в пакете babel (т.е. можно добавить проверку языка и выводить дату в нужном формате).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Работает, но достаточно странно:

\def \printdate#1.#2.#3 {#1~\ifcase#2\or января\or февраля\or марта
	\or апреля\or мая\or июня\or июля\or августа\or сентября
	\or октября\or ноября\or декабря\fi~#3~г.}

…document…

\printdate 31.1.2012

выводит 31 января 2012 г.

Но если написать

(\printdate 31.1.2012)

, то выведет (31 января 2012) г. И вообще, как бы ни крутил, почему-то всегда г. за скобками оказывается, в т.ч. за квадратными. Вроде ж с пробелами ок всё.

HolyBoy
() автор топика
Ответ на: комментарий от HolyBoy

Это потому, что третьим аргументом считается все, что находится между второй точкой и завершающим пробелом. Из ситуации можно выйти, например, так:

\def\printdate#1.#2.#3.{#1~\ifcase#2\or января\or февраля\or марта 
   \or апреля\or мая\or июня\or июля\or августа\or сентября 
   \or октября\or ноября\or декабря\fi~#3~г.} 
но тогда обязательно ставить в конце точку: \printdate 31.1.2012.

можно так:

\def\printdate[#1.#2.#3] ...
и заключать аргумент в квадратные скобки, а можно так:
\makeatletter
\def\printd@te#1.#2.#3 {#1~\ifcase#2\or января\or февраля\or марта 
   \or апреля\or мая\or июня\or июля\or августа\or сентября 
   \or октября\or ноября\or декабря\fi~#3~г.}
\def\printdate#1{\printd@te#1 }
\makeatother
и заключать аргумент в фигурные скобки: \printdate{1.01.2010}

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Второго варианта хватит за глаза, т.к. завершающая точка неочевидна пользователям.

Большое спасибо!

HolyBoy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.