![如何创建一个允许您在“ : ”之前加粗单词的环境](https://linux22.com/image/470392/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%85%81%E8%AE%B8%E6%82%A8%E5%9C%A8%E2%80%9C%20%3A%20%E2%80%9D%E4%B9%8B%E5%89%8D%E5%8A%A0%E7%B2%97%E5%8D%95%E8%AF%8D%E7%9A%84%E7%8E%AF%E5%A2%83.png)
(这是我的第一个问题,我希望我没有违反任何规则)
我需要一个环境,它基本上以“:”符号分隔的单词列表作为输入,并且只加粗“:”之前出现的内容
实例:
如果我在我的代码中写入
\begin{environment}
pizza: italian food made of (etc...)
dog: animal that is similar to a wolf and (etc...)
John: name of persone that (etc...)
plastic: type of material given by (etc...)
\end{environment}
我希望我的输出是:
比萨:由(等等......)制成的意大利食物
狗:类似于狼的动物和(等等......)
约翰: 人员姓名(等等……)
塑料:(等等……)给出的材料类型
一般来说,其他“:”也可以出现在单词描述中,因此要注意的一点是,这是不被允许的(基本上,它必须在第一个“:”之前以粗体显示)。
我最初使用 chatGPT 尝试创建这个环境,但尽管我对其进行了各种修正(它仍然生成了大量错误或不起作用的代码)
动机
我已经定义了单词列表(大约有 4000 个单词),我想避免在每个单词前面复制和粘贴“\mathbf{}”或任何其他命令(如“\item”或类似命令)。因此,如果这是一个只需要在列表开头和结尾添加代码的环境,我会非常高兴。
答案1
我可能会编辑源代码而不是这样做但是...
\documentclass{article}
\newenvironment{environment}
{\obeylines
\everypar{\boldify}%
}
{}
\def\boldify#1:{\textbf{#1: }}
\begin{document}
\begin{environment}
pizza: italian food made of pineapples (etc...)
dog: animal that is similar to a wolf and (etc...)
John: name of persone that (etc...)
plastic: type of material given by (etc...)
\end{environment}
aaa: oops
\end{document}
答案2
我们可以在 OpTeX 中做什么:
\def\begbf{\bgroup \everypar={\bftocolon}}
\def\endbf{\egroup}
\eoldef\bftocolon#1{\bftocolonA#1\par}
\def\bftocolonA#1:{{\bf#1:}}
\begbf
pizza: italian food made of pineapples (etc...)
dog: animal that is similar to a wolf and (etc...)
John: name of persone that (etc...)
plastic: type of material given by (etc...)
\endbf
\bye
答案3
只是为了多样性,我们来介绍一个基于 LuaLaTeX 的解决方案。它的工作原理是:(a) 创建一个 Lua 函数,该函数使用 Lua 的string.gsub
函数将材料加粗,直到但不包括输入字符串中的第一个“:”字符;(b) 设置一个名为 的 LaTeX 环境boldify
,其中 Lua 函数被分配给 LuaTeX 的process_input_buffer
回调。在那里,Lua 函数充当输入流的预处理器,前TeX 开始其常规处理。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' env.
\begin{luacode}
function boldify ( s )
return ( s:gsub ( "^(.-):" , "\\textbf{%1}:" ) )
end
\end{luacode}
\newenvironment{boldify}{%
\obeylines
\directlua{luatexbase.add_to_callback (
"process_input_buffer", boldify, "boldify" )}}{%
\directlua{luatexbase.remove_from_callback (
"process_input_buffer", "boldify" )}}
\begin{document}
\begin{boldify}
pizza: Italian food made of \dots
dog: animal that is similar to a wolf and \dots
John: name of person that \dots
plastic: type of material given by \dots
\end{boldify}
aaa:
bbb:
\end{document}