“隐藏文本”使“widthof”膨胀

“隐藏文本”使“widthof”膨胀

法文字母要求标题注明地点和日期,我将其输入到 中\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 镜头-2

答案1

这里的问题是,该babel包通过覆盖 处的设置来干扰您\DTMsetdatestyle在序言中的默认设置\begin{document}\shiftheading执行宏时,会使用全局日期设置获取#3的宽度,而新设置仅在环境内应用。因此,预先计算的宽度和实际文本的宽度不同。\letterlieudate\letterdateminipage

一个简单的解决方法是

\DTMsetdatestyle{ddmmyyyy}
\DTMsetup{datesep={/}}

\begin{document}

相关内容