我试图将行首字母大写,并且只将行首字母大写,我已将其定义为。到目前为止,\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
会发生相同的错误:\xmakefirstuc
datatool-base
inputenc
mfirstuc
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{datatool-base}
\usepackage{mfirstuc}
\begin{document}
\def \mytext {ĥi how are you?}
\xmakefirstuc{\mytext}
\end{document}