我的系统操作系统是 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}