将定义变量的首字母大写

将定义变量的首字母大写

我试图将行首字母大写,并且只将行首字母大写,我已将其定义为。到目前为止,\mytext我一直使用... 。但现在我将其作为变量{\MakeUppercase put text here?}

\documentclass{article}

\begin{document}
  \def \mytext {hi how are you?}       

{\MakeUppercase hi how are you?} \par        % => Hi how are you?
{\MakeUppercase \mytext}                     % => HI HOW ARE YOU?
\end{document}

如何使定义的变量的首字母大写?提前致谢!

答案1

  \expandafter\MakeUppercase \mytext

答案2

这是另一种方法:

\documentclass{article}

\usepackage{mfirstuc}

\begin{document}
  \def \mytext {hi how are you?}

  \xmakefirstuc{\mytext}
\end{document}

这与 David 的答案非常相似,但也可以处理文本包含文本块格式化命令(其中第一个参数是需要格式化的文本)的尴尬情况。例如:

\documentclass{article}

\usepackage{mfirstuc}

\begin{document}
  \def \mytext {hi how are you?}

  \xmakefirstuc{\mytext}

  \def \mytext {\emph{hi} how are you?}

  \xmakefirstuc{\mytext}
\end{document}

嗨,你好嗎?*嗨*你好嗎?

在上面的第二种情况下,它有效地做到了:

\emph{\MakeUppercase hi} how are you?

一个简单的\expandafter\MakeUppercase\mytext方法可以导致:

\MakeUppercase\emph{hi} how are you?

它没有像尝试的那样起作用\MakeUppercase{\emph}

提供的命令mfirstuc不适用于声明(例如\em\itshape),因为该包是为语义标记而设计的,而不是自由格式的。您可以使用语义标记来处理带引号或括号的材料。例如:

\documentclass{article}

\usepackage{mfirstuc}

\begin{document}

  \newcommand*{\qt}[1]{``#1''}

  \def \mytext {\qt{hi how are you?}}

  \xmakefirstuc{\mytext}
\end{document}

“你好你好吗?”

另一个需要考虑的问题是您是否打算使用 UTF-8 字符inputenc。这对于 XeLaTeX 或 LuaLaTeX 来说不是问题,但对于 LaTeX,UTF-8 字符被视为两个八位字节。例如:

\def \mytext {ĥi how are you?}
\expandafter\MakeUppercase\mytext

这会导致错误:

! Argument of \UTFviii@two@octets has an extra }.

因为只抓取了第一个八位字节。除非您在 之后和 之前加载(至少是 v2.24),否则\MakeUppercase会发生相同的错误:\xmakefirstucdatatool-baseinputencmfirstuc

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{datatool-base}
\usepackage{mfirstuc}

\begin{document}

  \def \mytext {ĥi how are you?}

  \xmakefirstuc{\mytext}
\end{document}

你好你好吗?

相关内容