在 \makebox 上应用 \MakeUppercase 会使文本消失

在 \makebox 上应用 \MakeUppercase 会使文本消失

以下是该问题的 MWE:

\documentclass{article}

\begin{document}
\makebox[4cm][l]{This is a test.}

\MakeUppercase{\makebox[4cm][l]{This is a test.}}
\end{document}

其结果是:

有文字的段落和缺少文字的段落

日志没有显示任何错误或警告。

为什么会发生这种情况?我怎样才能使第二段的文字出现?

答案1

我在这里分享我的解决方案。希望对你有用。

\documentclass{article}

\DeclareRobustCommand*{\mybox}[1]{\makebox[4cm][l]{#1}}

\begin{document}

\makebox[4cm][l]{This is a test 1.}

\MakeUppercase{%
    \mybox{This is a test 2.}}

\end{document}

答案2

你的例子可以简化为

\documentclass{article}

\begin{document}


\makebox[4cm][L]{THIS IS A TEST.}


\end{document}

生成一个空白页(除页码外)

问题在于\makebox使用非常压缩的测试来检查[l]、、选项,并且在它是一个意外值[r][c]情况下,L而不是给出警告、错误或默认,[c]它会默默地丢弃所有内容。

1993 年,我们的令牌内存非常短缺,无法添加额外的检查,但现在这看起来像是一个错误。

这将使\makebox日志

LaTeX Warning: Unexpected alignment L on input line 18.

然后充当[c]生产

在此处输入图片描述

\documentclass{article}

\makeatletter
\long\def\@imakebox[#1][#2]#3{%
  \@begin@tempboxa\hbox{#3}%
    \setlength\@tempdima{#1}%       support calc
    \hb@xt@\@tempdima{%
     \expandafter\ifx\csname bm@#2\endcsname\relax\bm@c
     \@latex@warning{Unexpected alignment #2}%
     \else\csname bm@#2\endcsname
     \fi}%
  \@end@tempboxa}
\makeatother

\begin{document}


\makebox[4cm][L]{THIS IS A TEST.}


\end{document}

答案3

发生这种情况的原因是括号内的“l”也被大写了。

我建议将其放在\MakeUppercase盒子里面,而不是盒子外面。

相关内容