Команда LaTeX для последних изменений

Есть ли команда LaTeX, которая печатает дату последнего изменения фактического документа? Поскольку проекты LaTeX состоят из более чем одного файла, эта команда идеально печатает дату фактического файла, а не проект.

Ответ 1

К сожалению, TeX не предоставляет команды для такой информации; единственный способ получить такую ​​информацию -

  • запустив не-TeX script для создания файла TeX перед запуском LaTeX и включив этот файл в ваш основной документ LaTeX, или
  • запустив внешний script из TeX (который работает только в том случае, если включена так называемая функция write18 или shellescape, вам придется обратиться к руководству по вашей реализации TeX для этого и не иметь упрямого sysadmin).

Возможно, что расширенные TeXs поддерживают файловые инфо-команды (возможно, luaTeX?), но не являются частью TeX.

Ответ 2

pdfTeX предоставляет примитив \pdffilemoddate для запроса этой информации для файлов. (LuaTeX использует свои собственные функции Lua для одной и той же вещи.) Поскольку pdfTeX используется по умолчанию во всех дистрибутивах LaTeX за последние несколько лет (по крайней мере), нет никакого вреда в использовании новой функциональности, если вы не имеете дело с очень старым производством системы. Вот пример:

\documentclass{article}
\begin{document}
\def\parsedate #1:20#2#3#4#5#6#7#8\empty{20#2#3/#4#5/#6#7}
\def\moddate#1{\expandafter\parsedate\pdffilemoddate{#1}\empty}
this is the moddate: \moddate{\jobname.tex}
\end{document}

(Предположим, что файл был изменен с 2000 года.)

Ответ 3

Пакет filemod, кажется, делает именно то, что вам нужно. Чтобы получить последнюю измененную дату файла, вы просто включаете пакет обычным способом:

\usepackage{filemod}

и время модификации текущего документа напечатано:

\filemodprintdate{\jobname}

вы также можете распечатать время модификации, и есть много вариантов форматирования вывода.

Ответ 4

Если вы используете автоматическую систему сборки, вы можете попросить ее сгенерировать файл (возможно, с именем today.sty), который зависит от всех исходных файлов.

В make это может выглядеть так:

today.sty: $LATEX_SRCS
        echo "\date{" > [email protected]
        date +D >> [email protected]
        echo "}" >> [email protected]

и \usepackage{today.sty}.

Будет использоваться дата первой сборки после изменения файла и не будет обновляться до тех пор, пока вы не удалите today.sty или не измените другой исходный файл.

Ответ 5

поблагодарить dmckee

LATEX_SRCS = test.tex

define moddate
date +%Y%m%d%H%M%S
endef

today.sty: $(LATEX_SRCS)
    @echo "\def\moddate{"$(shell $(moddate))"}"> [email protected]

Ответ 6

Существует пакет getfiledate LaTeX (по умолчанию он был частью моего дистрибутива LaTeX). Кажется, он предназначен для автоматического вывода абзаца следующим образом:

The date of last modification of file misc-test1.tex was 2009-10-11  21:45:50.

с небольшим количеством возможностей для настройки выхода. Вы точно можете получить только дату. Тем не менее, я не мог понять, как избавиться от новой строки в течение даты и как изменить формат даты. Честно говоря, я думаю, что авторы внедрили его именно для единственной цели, в которой они нуждались, и это довольно громоздко для общего использования.