大家好,我正在为我的十年级平面设计课做一个项目,我们必须用大号、粗体和大写字母写一个鼓舞人心的东西,我想知道在 TeX 中是否有一种方法可以制作一个预先确定的单词列表,并对其产生影响,有点像 CSS 之于 HTML,我制作那个列表并告诉它产生那些效果,每当我输入它们时,它们都会输出我告诉它的效果。这里有一个例子
你好怎么样你的天我希望如此伟大的。
答案1
当然,这只是个玩笑。需要 XeLaTeX。
\documentclass{article}
\usepackage{fontspec}
\usepackage{xesearch}
\SearchList{upper}{\textbf{\MakeUppercase{#1}}}{hi,your,great,I}
\begin{document}
Hi, how was your day? I hope it was great.
\StopList{upper}
Hi, how was your day? I hope it was great.
\end{document}
答案2
这是一个完全不同的方法,它允许你对每个单词应用格式,即literate
使用包裹listings
:
笔记:
- 该解决方案与使用逐字环境的其他问题一样。
进一步增强:
- 我使用尾随空格来检查匹配的单词是否正确,而不是单词的一部分。但是,这需要单独检查尾随标点符号。此处的某种正则表达式匹配会很有帮助。
代码:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstdefinestyle{FormattedNumber}{%
literate={great }{\textcolor{blue}{GREAT }}{1}%
{great.}{\textcolor{blue}{GREAT}.}{1}%
{hi }{\textcolor{red}{HI }}{1}%
{I }{\textcolor{orange}{I }}{1}%
{your }{\textbf{YOUR }}{1}%
,
}
\newcommand{\CSS}[1]{%
\lstinline[style=FormattedNumber]{#1}%
}
\begin{document}
\CSS{hi how was your day I hope it was great.}
\end{document}
答案3
好吧,这里有一种方法可以解决这个问题:将所需的文本放在环境中并在排版之前对其进行预处理。但是,我还不确定这是否符合答案的条件,因为我认为它确实需要某种扩展魔法才能将宏应用于\textbf{}
所需的单词——我无法让它工作。但目前这可以进行一些简单的文本替换:
笔记:
- 我用了包裹
environ
它提供了一个环境,您可以通过访问环境的完整主体\BODY
。 - 此版本需要在环境主体中仅包含纯文本。
- 下面
\protected@edef
用于防止“避免发生不好的事情“正如大卫卡莱尔的评论。
进一步增强:
- 弄清楚如何将宏应用到选定的单词。
- 有一个单词列表和一个要应用于每个单词的特定宏,并使用一种
\foreach
循环来处理。不确定这是否更简单。 - 我使用尾随空格来检查匹配的单词是否正确,而不是单词的一部分。但是,这需要单独检查尾随标点符号。此处的某种正则表达式匹配会很有帮助。
代码:
\documentclass{article}
\usepackage{xstring}
\usepackage{environ}
\makeatletter
\newcommand{\AlteredBody}{}
\NewEnviron{CSS}{
\protected@edef\AlteredBody{\BODY}
\StrSubstitute{\AlteredBody}{great }{GREAT }[\AlteredBody]
\StrSubstitute{\AlteredBody}{great.}{GREAT.}[\AlteredBody]
\StrSubstitute{\AlteredBody}{hi }{HI }[\AlteredBody]
\StrSubstitute{\AlteredBody}{your }{YOUR }[\AlteredBody]
\AlteredBody
}
\makeatother
\newcommand{\Text}{hi how was your day I hope it was great.}%
\begin{document}
\Text
\medskip
\begin{CSS}
\Text
\end{CSS}
\end{document}