![пакет [datetime] не работает с](https://rvso.com/image/305763/%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%20%5Bdatetime%5D%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%81%20.png)
Ниже представлен SSCCE:
\documentclass{report}
\usepackage{datetime}
%\usepackage{titling} %if this line is uncommented compilation fails
\begin{document}
\newdate{date2}{08}{02}{2015}
\date{\displaydate{date2}}
foo
\end{document}
... приведенный выше код компилируется, но если строка, вызывающая пакет, titling
не закомментирована, компиляция завершается ошибкой:
pdflatex esa-sre-gedais-sdp.tex
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)
entering extended mode
(./esa-sre-gedais-sdp.tex
LaTeX2e <2009/09/24>
Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, loaded.
(/usr/share/texmf-texlive/tex/latex/base/report.cls
Document Class: report 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texmf-texlive/tex/latex/base/size10.clo))
(/usr/share/texmf-texlive/tex/latex/datetime/datetime.sty
(/usr/share/texmf-texlive/tex/latex/fmtcount/fmtcount.sty
(/usr/share/texmf-texlive/tex/latex/base/ifthen.sty)
(/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty)
(/usr/share/texmf-texlive/tex/latex/amsmath/amsgen.sty)
(/usr/share/texmf-texlive/tex/latex/fmtcount/fc-english.def)
(/usr/share/texmf-texlive/tex/latex/fmtcount/fc-USenglish.def)
No configuration file fmtcount.cfg found.
)) (/usr/share/texmf-texlive/tex/latex/titling/titling.sty)
(./esa-sre-gedais-sdp.aux))
! Incomplete \iffalse; all text was ignored after line 8.
<inserted text>
\fi
<*> esa-sre-gedais-sdp.tex
? X
No pages of output.
Transcript written on esa-sre-gedais-sdp.log.
make: *** [all] Error 1
решение1
Я понятия не имею, что делает каждый из этих пакетов, но если сомневаетесь, добавьте \protect
. Это выполняется без ошибок:
\documentclass{report}
\usepackage{datetime}
\usepackage{titling} %if this line is uncommented compilation fails
\begin{document}
\newdate{date2}{08}{02}{2015}
\date{\protect\displaydate{date2}}
foo
\end{document}
решение2
Пакет datetime
имеет своеобразный выбор того, какие команды должны быть надежными, а какие нет. Например, он объявляет \longdate
, \shortdate
и подобные команды надежными (вероятно, они не должны таковыми быть), но он не делает того же самого, \displaydate
что, скорее всего, будет использоваться при перемещении аргументов.
Итак, пакетдолженделать
\DeclareRobustCommand*{\displaydate}[1]{%
\@ifundefined{date@#1@y}{%
\PackageError{datetime}{Date `#1' not defined}{}}{%
\formatdate{\csname date@#1@d\endcsname}{%
\csname date@#1@m\endcsname}{%
\csname date@#1@y\endcsname}}}
потому что эта команда использует \formatdate
, которая выполняет назначения и не объявлена как надежная при (пере)определении (также \PackageError
является виновником). К сожалению, пакет использует \newcommand
вместо этого.
Вы можете решить эту проблему следующим образом etoolbox
:
\documentclass{report}
\usepackage{etoolbox}
\usepackage{datetime}
\usepackage{titling} %if this line is uncommented compilation fails
\robustify{\displaydate} % make \displaydate robust
\begin{document}
\newdate{date2}{08}{02}{2015}
\title{Title}
\author{Author}
\date{\displaydate{date2}}
\maketitle
foo
\end{document}
и сообщите об этом автору пакета.