这就是我要的:
- 当我在“”之间输入一些内容时,它会变成粗体和绿色。
- 当我输入 Q: 时,其后直到遇到 ? 的文本应该变成斜体和蓝色。
这种东西能通过Latex实现吗?如果可以,请指点Latex的相关文档。
回复此评论:Latex 对于自定义格式有用吗?
你的实际目标是什么?你想创建一个生成 PDF 的应用程序,还是想编写 LaTeX 加上这些新功能?
答案1
这是一个基于 LuaLaTeX 的解决方案。
此解决方案采用预处理器方法。Lua 有几个非常强大且灵活的模式匹配函数。Lua 函数make_replacements
对所有输入材料执行两个模式匹配和替换操作,前TeX 甚至开始其“常规”处理。
附录纳入 OP 提供的有关其排版目标的附加信息:
LaTeX 非常适合处理此类排版需求。我建议您 (a) 在序言中定义以下宏
\newcommand\QQ[1]{\par\noindent Q: {\itshape\textcolor{green}{#1}}\par}
然后写下类似
\QQ{What is a pointer?}
或者
\QQ{Where are expressions, constants stored if not in memory?}
在正文中。同样,您需要提供一个\AA
宏来提供答案的基本格式。
这是生成上面显示的屏幕截图的代码。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{xcolor,luacode}
%% Lua-side code
\begin{luacode}
function make_replacements ( s )
s = string.gsub ( s , "Q:(.-)%?" , "Q: {\\itshape\\color{blue}%1}?" )
s = string.gsub ( s , "``(.-)''" , "``{\\bfseries\\color{green}%1}''" )
return s
end
\end{luacode}
%% TeX-side code
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
"process_input_buffer" , make_replacements , "make_replacements" )}}
\begin{document}
bla bla Q: Yes? bla bla ``No'' More bla bla
\end{document}
答案2
我认为这是错误的方法。你问的问题需要在 TeX 内部进行低级编程。你会看到这个答案,如 leandriis 在评论中所链接。
你可以像这里一样简单:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\newcommand{\bang}[1]{\textcolor{green}{\textbf{`#1`}}}
\newcommand{\Q}[1]{\emph{\textcolor{blue}{Q#1?}}}
\begin{document}
Always keep things as simple as possible. A \bang{bang for a
buck}. More \Q{ualifications are needed if you mess things up}
\end{document}
答案3
TeX(以及 LaTeX)允许您重新定义其解析设置。这样,特定字符就可以“激活”,即它们像宏一样工作。它还允许您指定一个参数文本在扩展宏时会搜索它。这样你就可以实现诸如“读取所有内容直到下一个‘?’”之类的功能。但是,你需要使用纯 TeX 宏(例如,\def
而不是\newcommand
)。最好的参考资料是 Knuth 的《The TeXBook》,但还有其他参考资料(例如“TeX by reference”)。我还使用\@ifnextchar
LaTeX 提供的来向前看。此类宏列在macros2e
. 但是它使用了 plainTeX \futurelet
。
请注意,这是高级内容,如果使用不当可能会导致错误。最好自己在内容周围添加宏。另一种方法是使用脚本,通过扫描您描述的模式将文本转换为 LaTeX,并自动在其周围添加 LaTeX 宏。
请注意,如果 后面有空格,Q
则会将其删除。这是由于\@ifnextchar
。此外,您不能再Q
在宏名称中使用。我在 处收到错误,\begin{document}
因为其他一些包尝试在那里的宏参数中使用Q
。因此我将代码移到了它后面。
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\makeatletter
\def\old@q{Q}
\catcode`\Q=\active
\def Q{%
\@ifnextchar :{%
\process@q
}{%
\old@q
}%
}
\def\process@q :#1?{%
{\color{blue}\itshape #1}%
}
\makeatother
\catcode`\`=\active
\long\def`#1`{{\color{green}\bfseries #1}}
Test `it` out
Q: test it?
AA Q AA
Quick test
\end{document}
使用该包可以很好地实现蓝色斜体引号newverbs
。只需定义一个新的动词命令,然后将其作为“短动词”附加到字符上即可。
\usepackage{newverbs}
\newverbcommand{\qblueitalic}{\begingroup\color{blue}\itshape\qverbbeginquote}{\qverbendquote\endgroup}
\MakeSpecialShortVerb{\qblueitalic}{\`}
\qverbbeginquote
和宏\qverbendquote
将普通引号字符重新添加为普通文本。