命令全部大写

命令全部大写

我正在尝试使用命令将一些文本设置为全部大写(而不是小写)\uppercase。部分文本是可变的并存储在单独的命令中,但该部分文本设置为小写。我该如何解决这个问题?

以下是 MWE:

\documentclass[10pt]{article}

\begin{document}

\newcommand{\test}{lower case}
\uppercase{Why is the last part in \test}?

\end{document}

答案1

使用 TeX 基元需要了解它们的用途。在本例中,您尝试使用\uppercase,但其操作可能与您预期的不同:

  1. 看到 后\uppercase,TeX 会寻找{(类别代码为 1 的显式或隐式字符标记)扩展标记并忽略空格标记或\relax
  2. 一旦{被发现,TeX 就会吸收 token无扩展直到找到一个<右括号>(类别代码为 2 的明确字符标记);
  3. 此时 TeX 会将找到的 token 发送到另一个处理器,进行转换字符标记根据数组,转换为大写版本\uccode(不改变类别代码);非字符标记不受影响;
  4. 最后,结果标记列表将被发送回主输入流进行处理,就好像它一开始就在那里一样。

第 3 点适用于您\test:您得到的是

WHY IS THE LAST PART IN \test

\test找到时,它会扩展为lower case

您可以使用第 1 点中描述的“扩展”功能并执行

\uppercase\expandafter{\expanded{Why is the last part in \test}}

因为扩展\expandafter会触发\expanded,反过来会传递\uppercase令牌列表

Why is the last part in lower case

但你最好不要尝试,除非你的文本完全没有重音和其他几个危险的令牌。输入

\documentclass{article}

\newcommand{\naive}{na\"ive}

\begin{document}

\uppercase\expandafter{\expanded{This is \naive}}

\end{document}

将停止处理

\protect
! Missing } inserted.
<inserted text>
                }
l.7 ...case\expandafter{\expanded{This is \naive}}

与此相反的,

\documentclass{article}

\newcommand{\naive}{na\"ive}

\begin{document}

\MakeUppercase{This is \naive}

\end{document}

可以完美运行。

另一个例子说明了为什么\MakeUppercase要使用:

\documentclass{article}
\usepackage[turkish]{babel}

\begin{document}

\MakeUppercase{Bu türkçe bir cümle}% This is a sentence in Turkish

\end{document}

根据土耳其语正字法,将“i”大写时产生正确的字形:

在此处输入图片描述

答案2

使用\MakeUppercase

\documentclass[10pt]{article}

\begin{document}

\newcommand{\test}{lower case}
\newcommand{\testi}{upper case}
\uppercase{Why is the last part in \test}?

\MakeUppercase{Now everything is in \testi}.
\end{document}

在此处输入图片描述

答案3

如果您愿意并且能够使用LuaLaTeX,您可以使用 Lua 的string.upper函数执行全大写的转换。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\newcommand{\test}{lower case}
\newcommand\LuaUppercase[1]{\directlua{tex.sprint(string.upper("#1"))}}

\usepackage{textgreek}
\begin{document}
\uppercase{Why is the last part in \test}?

\LuaUppercase{Why is the last part in \test}?
\end{document}

相关内容