在撰写文档时,我通常会在方括号之间写上“主题句”(即大纲句),如下所示:
[这是下一段的中心思想]
在这里,我写了一个经过润色且写得很好的主题句版本。
我希望将方括号之间的任何文本放入草稿环境中:
[foo 栏]
应该成为
\begin{draft}
foo bar
\end{draft}
我遇到的问题是如何使“[”和“]”成为活动字符。
我知道方括号通常用于参数,并且在读取命令(即\begin[args]{something}
)后,编译器会查找 catcode 11 个字符,如果是括号,则会读取参数。
将“[”或“]”的 catcode 更改为 active(或 catcode 13)将会破坏这一点。
有什么办法可以解决这个问题吗?也许甚至可以将正则表达式与 latex3 一起使用?
谢谢。
答案1
如果我正确理解了你的帖子,你正在寻求转换实例
[ topic sentence here ]
到
\begin{draft} topic sentence here \end{draft}
环境可以通过以下draft
方式定义
\newenvironment{draft}{\color{gray}}{}
此外,我假设主题句,在输入文件中,它们各自位于一行中。换句话说,我会假设包含主题句的一行以 开头[
并以 结尾]
。这些假设意味着[...]
\setmainfont{...}[...]
是不是主题句,因此不应转换为\begin{draft}...\end{draft}
。
如果这些假设有效,那么以下基于 LuaLaTeX 的解决方案可能会引起您的兴趣。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{geometry}
\usepackage{xcolor}
\newenvironment{draft}{\color{gray}}{} % per the OP's write-up
\usepackage{luacode}
\begin{luacode}
function convert_topic_sentences ( s )
if s:find ( "^%[.+%]$" ) then -- found a topic sentence line
return ( "\\begin{draft}"..s:sub(2,-2).."\\end{draft}" )
end
end
\end{luacode}
% LaTeX macro to 'activate' the Lua function by assigning it to
% LuaTeX's "process_input_buffer" callback, where it acts as a
% pre-processor.
\newcommand\TSOn{\directlua{luatexbase.add_to_callback (
"process_input_buffer" , convert_topic_sentences , "TSON" )}}
\newcommand\TSOff{\directlua{luatexbase.remove_from_callback (
"process_input_buffer" , "TSON" )}}
\begin{document}
\TSOn % activate the Lua function
Hello.
[A topic sentence.]
[A somewhat longer topic sentence.]
Not a topic sentence.
\TSOff % deactivate the Lua function
\smallskip
Hello.
[A topic sentence.]
[A somewhat longer topic sentence.]
Not a topic sentence.
\end{document}
答案2
这样做可能会破坏某些东西,并且有额外的限制,即必须开始一个段落(注意与 Mico 的例子相比[
后面有一个空白行)。Hello
但如果 Lua 不可用...
\documentclass{article}
\usepackage{geometry}
\usepackage{xcolor}
\newenvironment{draft}{\par\color{gray}}{\par} % per the OP's write-up
\makeatletter
\def\TSOn{\everypar{\dodraft}}
\def\TSOff{\everypar{}}
\def\dodraft{\@ifnextchar[\dodraft@{}}
\def\dodraft@[#1]{\begin{draft}#1\end{draft}}
\makeatother
\begin{document}
\TSOn % activate the Lua function
Hello.
[A topic sentence.]
[A somewhat longer topic sentence.]
Not a topic sentence.
\TSOff % deactivate the Lua function
\smallskip
Hello.
[A topic sentence.]
[A somewhat longer topic sentence.]
Not a topic sentence.
\end{document}
答案3
我们不知道您的环境是如何定义的,但我认为您正在寻找(在第 102 和 103 页中找到\lbrack
)\rbrack
符号-a4.pdf你可以在其中找到一些替代方案和其他符号名称。)
因此,定义的一个例子可能是\newenvironment{draft}[1]{\lbrack\textcolor{gray}{#1}\rbrack}