法文字母要求标题注明地点和日期,我将其输入到 中\letterlieudate
,然后将其输入到 中minipage
。要求:minipage
的宽度刚好足够大,以便\letterlieudate
一行显示。两个选项:1) 手动输入日期,或 2) 使用\today
(以及一个 cmd 来设置其前面的样式)。只有 1) 可以正确完成工作。对于 2),宽度估计过高。为什么以及如何解决此问题?
\documentclass[12pt]{report}
\usepackage[french]{babel}
\usepackage{calc}
\usepackage[showdow, fr-FR]{datetime2}
\usepackage[T1]{fontenc}
\usepackage[
a4paper
%,scale=0.8
%,showframe%for testing
]{geometry}
\AtBeginDocument{\vspace*{-1cm}}
\usepackage{lipsum}%for testing
\usepackage{xparse}
\usepackage{hyperref}
%definitions--------------------------------------
\DTMsetdatestyle{ddmmyyyy}
\DTMsetup{datesep={/}}
\def\letterplace{Paris}
\def\letterdate{\today}
%\def\letterlieudate{À Paris, le 23/10/2019.} %option 1
\def\letterlieudate{À Paris, le \letterdate.} %option 2
\def\letterlieudatewidth{\widthof{\letterlieudate}} %TODO
%commands-----------------------------------------
\NewDocumentCommand{\myheading}
{O{}+mO{\newline}}
{\noindent #1#2#3}
\NewDocumentCommand{\shiftheading}{O{0.8}+mO{\letterlieudatewidth}}
{%
\makebox[#1\textwidth][r]
{%
\frame{%for testing
\begin{minipage}{#3}%
\begin{flushleft}#2\end{flushleft}
\end{minipage}}
}
}
\begin{document}%---------------------------------
\thispagestyle{empty}
\shiftheading{%
\myheading[%
\DTMsetdatestyle{ddmmyyyy}%option 2
]
{\letterlieudate}
}
\end{document}
答案1
这里的问题是,该babel
包通过覆盖 处的设置来干扰您\DTMsetdatestyle
在序言中的默认设置\begin{document}
。\shiftheading
执行宏时,会使用全局日期设置获取#3
的宽度,而新设置仅在环境内应用。因此,预先计算的宽度和实际文本的宽度不同。\letterlieudate
\letterdate
minipage
一个简单的解决方法是
\DTMsetdatestyle{ddmmyyyy}
\DTMsetup{datesep={/}}
后\begin{document}
。