矩阵中的小型大写字母,\\ 与 foreach 循环结合

矩阵中的小型大写字母,\\ 与 foreach 循环结合

我想创建一个命令,将所有文本都转换为小写字母并放在矩阵中。这是下面的 \fmold。这给了我一个错误,提示我创建一个 foreach 循环,如 \smallcapsify 和 \fm 中所示。有什么好的解决方案吗?为什么这两种解决这个问题的方法都不起作用?

\documentclass[10pt]{article}
\usepackage[margin = .5in]{geometry}
\usepackage[T1]{fontenc}
\usepackage{mathtools} 
\usepackage{stmaryrd}
\usepackage{amsmath} 
\usepackage{tikz}
\usepackage{xstring}

\newcommand{\smallcapsify}[1]{
        \foreach \x in {#1}{\textsc{\x}\\}}

\newcommand{\fm}[1]{$
    \left[
    \begin{matrix}
        \smallcapsify{#1}
    \end{matrix}
    \right] $}

\begin{document}

\fmold{a\\b\\c}
\smallcapsify{a,b,c}
\fm{a,b,c}

\end{document}

答案1

只是为了好玩,没有\foreach和有一个更通用的宏。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\matrixify}{O{b}mm}
 {
  \cs_set_protected:Nn \__jackirab_matrixify:n { #3 \\ }
  \begin{#1matrix}
  \clist_map_function:nN { #2 } \__jackirab_matrixify:n
  \end{#1matrix}
 }

\ExplSyntaxOff

\NewDocumentCommand{\fm}{m}{\matrixify{#1}{\textsc{##1}}}

\begin{document}

$\matrixify{a,b,c}{\textsc{#1}}$
$\fm{a,b,c}$
$\matrixify[p]{a,b,c}{(#1)}$

\end{document}

尾随参数\matrixify是一个模板,其中#1代表当前项目。

可选参数可以为空、、pb默认)、或B,以按照通常惯例产生相应的栅栏。vVamsmath

您可以根据 来定义命令\matrixify,就像我所做的那样\fm;请记住,在这种情况下,当前项目必须用 来表示##1

在此处输入图片描述

答案2

使用标记列表来执行此操作。OP 方法的问题在于,所需的标记是在循环的组恶作剧中“排版”的\foreach。这样,只需保存所需的标记(以在循环之外保留的方式\foreach),然后再排版它们。

\documentclass[10pt]{article}
\usepackage[margin = .5in]{geometry}
\usepackage[T1]{fontenc}
\usepackage{mathtools} 
\usepackage{stmaryrd}
\usepackage{amsmath} 
\usepackage{tikz}
\usepackage{xstring}

\newtoks\mytoks
\newcommand\addtotoks[1]{\global\mytoks\expandafter{\the\mytoks#1}}
\newcommand\xaddtotoks[1]{\expandafter\addtotoks\expandafter{#1}}

\newcommand{\smallcapsify}[1]{\mytoks{}%
        \foreach \x in {#1}{\xaddtotoks{\expandafter\textsc\expandafter{\x}\\}}%
  \the\mytoks}

\newcommand{\fm}[1]{$
    \left[
    \begin{matrix}
        \smallcapsify{#1}
    \end{matrix}
    \right] $}

\begin{document}

$\begin{pmatrix}a\\b\\c\end{pmatrix}$
$\begin{matrix}\smallcapsify{a,b,c}\end{matrix}$
\fm{a,b,c}

\end{document}

在此处输入图片描述

答案3

您可以使命令范围内的所有数学运算默认为小型大写字母:

在此处输入图片描述

\documentclass[10pt]{article}
\usepackage[margin = .5in]{geometry}
\usepackage[T1]{fontenc}
\usepackage{mathtools} 
\usepackage{stmaryrd}
\usepackage{amsmath} 
\usepackage{tikz}
\usepackage{xstring}
\DeclareMathAlphabet {\mathsc}{OT1}{cmr}{m}{sc}


\newcommand{\fm}[1]{$
    \left[
    \mathsc{\everymath\expandafter{\expandafter\fam\the\fam\relax}\begin{matrix}#1\end{matrix}}    
    \right]$}

\begin{document}

\fm{a,b,c,A,B,C}

\end{document}

相关内容