在每个单词周围添加方框

在每个单词周围添加方框

我的系统操作系统是 MacOS 我使用 Xelatex

MWE 是

\documentclass[12pt]{article}
\usepackage{fontspec,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
\newcommand\fontnamekai{STKaiti}

\setmainfont{\fontnamekai}
\setsansfont[BoldFont=\fontnamekai]{\fontnamekai}
\setmonofont{\fontnamekai}
\begin{document}

国学

\end{document}

输出为在此处输入图片描述

我希望它变成 在此处输入图片描述

一些解决方案例如例子提供了。但他们使用了\newcommand。结果,我必须将此命令应用于每个单词,其中包含数千个单词。

也许需要一个环境,或者只是编辑文本显示方式,这样当显示文本时,它将自动显示为方框。非常感谢。

答案1

您可以创建一个解析字符串每个字符的命令,并创建一个将该命令应用于环境内容的环境。

此处的代码\scan(有点递归黑魔法)改编自此网站上 @wipet 的回答。您只需创建一个带有一个参数的新命令,然后\let\scando\yourcommand将该命令应用于传递给 的字符串中的每个字符\scan{}

我稍微简化了 MWE,并使用了 TeXLive 发行版自带的字体。\strut内部\fbox保持所有框的高度相同。

\documentclass[12pt]{article}                                                                                                                                                                                                                 
\usepackage{fontspec}                                                                                                                                                                                                                         
\setmainfont{FandolKai}                                                                                                                                                                                                                       

\def\scando{}                                                                                                                                                                                                                                 
\def\scan#1{\scanA#1\end}                                                                                                                                                                                                                     
\def\scanA#1{\ifx\end#1\else\scando#1\expandafter\scanA\fi}                                                                                                                                                                                   

\newcommand{\boxed}[1]{\fbox{\strut#1}}                                                                                                                                                                                                       
\let\scando\boxed                                                                                                                                                                                                                             

\usepackage{environ}                                                                                                                                                                                                                          
\NewEnviron{boxedchars}{\expandafter\expandafter\scan\BODY}                                                                                                                                                                                   

\begin{document}                                                                                                                                                                                                                              

\scan{AB}                                                                                                                                                                                                                                     
\scan{国学}                                                                                                                                                                                                                                   

\begin{boxedchars}                                                                                                                                                                                                                            
    国学                                                                                                                                                                                                                                      
    国学                                                                                                                                                                                                                                      
    国学                                                                                                                                                                                                                                      
    国学                                                                                                                                                                                                                                      
\end{boxedchars}                                                                                                                                                                                                                              

\end{document}       

在此处输入图片描述

编辑

OP 有理由希望该命令能够跨多个段落工作并允许换行。这是通过\long向和的定义添加来实现的\scan,这样\scanA它们就会读取\par在段落分隔处创建的标记。其次,我们必须在\boxed代码中添加一个条件测试来检查\par;在本例中,我将其设置为留\par在原处。我还在命令后添加了一个常规空格\fbox,这将允许 TeX 在框之间换行。

\documentclass[12pt]{article}                                                                                         
\usepackage{fontspec}                                                                                                 
\setmainfont{FandolKai}                                                                                               

\def\scando{}                                                                                                         
\long\def\scan#1{\scanA#1\end}                                                                                        
\long\def\scanA#1{\ifx\end#1\else\scando#1\expandafter\scanA\fi}                                                      

\newcommand{\boxed}[1]{\ifx\par#1#1\else\fbox{\strut#1} \fi}                                                          
\let\scando\boxed                                                                                                     

\usepackage{environ}                                                                                                  
\NewEnviron{boxedchars}{\expandafter\expandafter\scan\BODY}                                                           

\usepackage{parskip} % just to make paragraph divisions more visible for example                                      
\begin{document}                                                                                                      

\scan{AB}                                                                                                             
\scan{国学}                                                                                                           

\begin{boxedchars}                                                                                                    
    国学 国学 国学 国学                                                                                               

    国学 国学 国学 国学                                                                                               
    国学 国学 国学 国学                                                                                               

    国学 国学 国学 国学                                                                                               
    国学 国学 国学 国学                                                                                               

    国学 国学 国学 国学                                                                                               
    国学 国学 国学 国学                                                                                               
    国学 国学 国学 国学                                                                                               
\end{boxedchars}                                                                                                      

\end{document}   

在此处输入图片描述

相关内容