我想要一个命令,它可以接受一个单词并用一个框替换每个字母。
例如,输出
The mystery word is \mycommand{hello}.
应该
神秘词是□□□□□。
答案1
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tokcycle,amssymb}
\Characterdirective{\addcytoks{$\square$}}
\newcommand\mycommand[1]{\tokencyclexpress#1\endtokencyclexpress}
\begin{document}
The mystery word is \mycommand{hello}.
\end{document}
为了给出更充分的可能性的例子,我提供了另一个例子:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tokcycle,amssymb}
\Characterdirective{\addcytoks{\fbox{#1}\;}}
\newcommand\mycommand[1]{\tokencyclexpress#1\endtokencyclexpress}
\begin{document}
The mystery word is \mycommand{hello \textit{Mom}. \textbf{I love you}.}.
\end{document}
答案2
基本上是一行代码expl3
:
\documentclass{article}
\providecommand{\textsquare}{% from amsthm
\begingroup \usefont{U}{msa}{m}{n}\symbol{3}\endgroup
}
\ExplSyntaxOn
\NewDocumentCommand{\mystery}{m}
{
\text_map_inline:nn { #1 } { \textsquare \kern1pt } \unkern
}
\ExplSyntaxOff
\begin{document}
The mystery word is \mystery{hello}
The mystery word is \mystery{équipe}
The mystery word is \mystery{naïve}
\end{document}
答案3
为了确保万无一失,我们采用了基于 LuaLaTeX 的解决方案。
请注意,的参数\mycommand
可以包含一般的 utf8 编码字符,而不仅仅是 ASCII 编码字符;因此,\mycommand{你好世界}
完全没问题。还请注意,由于\directlua
和\luastring
是可扩展的,所以也是可扩展的\mycommand
。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amssymb} % for '\square' macro
\usepackage{luacode} % for '\luastring' macro
\newcommand\mycommand[1]{\directlua{
tex.sprint (( unicode.utf8.gsub ( \luastring{#1} , "." , "$\\square$" ) )) }}
\begin{document}
The mystery word is \mycommand{hello}, or is it \mycommand{你好世界}?
\end{document}