Latex 对于自定义格式有用吗?

Latex 对于自定义格式有用吗?

这就是我要的:

  1. 当我在“”之间输入一些内容时,它会变成粗体和绿色。
  2. 当我输入 Q: 时,其后直到遇到 ? 的文本应该变成斜体和蓝色。

这种东西能通过Latex实现吗?如果可以,请指点Latex的相关文档。

回复此评论:Latex 对于自定义格式有用吗?

你的实际目标是什么?你想创建一个生成 PDF 的应用程序,还是想编写 LaTeX 加上这些新功能?

我的目标是在可修改的文档中使用显示的格式和颜色输入以下内容:
在此处输入图片描述

答案1

这是一个基于 LuaLaTeX 的解决方案。

在此处输入图片描述

此解决方案采用预处理器方法。Lua 有几个非常强大且灵活的模式匹配函数。Lu​​a 函数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”)。我还使用\@ifnextcharLaTeX 提供的来向前看。此类宏列在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将普通引号字符重新添加为普通文本。

相关内容