我的问题与上一个问题关于处理参数中的特殊字符。但是,我无法根据自己的需要调整那里描述的技术。
数学家协会
\documentclass[fontsize=11pt, paper=a4, DIV=9]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb}
\usepackage{relsize}
\usepackage{xparse}
\makeatletter
\newcommand{\IT@Def@Hash}{\begingroup\catcode`\#=12 \gdef\IT@Char@Hash{#}\endgroup}
\newcommand{\IT@Def@Tilde}{\begingroup\catcode`\~=12 \gdef\IT@Char@Tilde{~}\endgroup}
\NewDocumentCommand{\Char}{>{\TrimSpaces}m}%
{%
\def\IT@Char{#1}
\ifx\IT@Char\empty
\mbox{$\varepsilon$}%
\else
\IT@Def@Hash
\ifx\IT@Char\IT@Char@Hash
\mbox{\texttt{\#}}%
\else
\IT@Def@Tilde
\ifx\IT@Char\IT@Char@Tilde
\mbox{\textscale{.87}{$\Box$}}%
\else
\mbox{\texttt{\IT@Char}}%
\fi
\fi
\fi
}
\makeatother
\begin{document}
\Char{}
\Char{~}
\Char{#}
\Char{x}
\end{document}
产生精确的输出
我正在寻找。不幸的是,LaTeX 发出了五个错误。
在 的参数中“误用”特殊字符~
和会非常方便。另一方面,这实际上并不是必要的,如果它造成太多麻烦,我会避免这样做。#
\Char{}
答案1
你可以用 来做到这一点\str_case:
。要处理~
,你需要确保 TeX 在定义时可以看到它\Char
(否则你会得到一个空格);至于 ,#
你需要将它翻倍,因为你在另一个命令中。
\ExplSyntaxOn
\NewDocumentCommand \Char { >{\TrimSpaces} m }
{
\str_case_x:nnF { \tl_to_str:n { #1 } }
{
{ } { \ensuremath{\varepsilon} }
{ ## } { \texttt{\#} }
{ \c_tilde_str } { \textscale{.87}{$\Box$} }
}
{ \texttt{#1} }
}
\ExplSyntaxOff
这意味着您可以轻松地为特定情况定义任何预定义输出,然后定义一个通用的 False 输出(可能还有另一个 True,但我省略了那个)。