Slack 这个软件程序,比如这个网站有一个非常巧妙的功能。当我像这样输入反引号时:“我可以在里面写任何程序员单词。比如:someFunction()
。
我如何在 LaTeX 中做到这一点?我希望在输出 pdf 中获得类似的效果。
我很确定这个问题已经得到解答了,但我想不出正确的搜索词来找到它。搜索词的寻宝游戏是真实的。
答案1
这是一个基于 LuaLaTeX 的解决方案。TeX 特殊字符(例如_
和&
)可能出现在反引号字符对之间。附录纳入 OP 的后续评论:需要小心,以免误解连续的反引号字符 - 这些字符通常用于 TeX 和 LaTeX 文档中以启动某些引用材料的实例!
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function backticks2tt ( s )
return ( s:gsub ( "`(..-)`" , "\\texttt{\\detokenize{%1}}" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
"process_input_buffer", backticks2tt, "backticks2tt" )}}
\usepackage{url}
\begin{document}
aa `someFunction()` bb `some_other_Function()` cc
\end{document}
Lua 函数执行的模式匹配类型的注释backticks2tt
似乎已指明。模式
`(..-)`
是“非贪婪”的方式来指定模式“所有实例一个或多个字符用反引号字符括起来的字符”。要在 Lua 中指定“一个或多个字符”的“贪婪”模式匹配,可以输入
`.+`
然而,贪婪模式匹配在这里并不合适,因为它最终会抓取整个字符串
someFunction()` bb `some_other_Function()
在上面显示的 MWE 中,将其更改为
\texttt{\detokenize someFunction()` bb `some_other_Function()}
显然,这是不正确的,这就是为什么需要指定非贪婪模式匹配。
答案2
根据 Mico 的回答,我变得更加严肃了。出于某种原因,我仍然遇到了一些问题。所以我决定通过一些文章学习一些 Lua,并在复制。该网站允许我快速地测试和打印东西。
在复制我反复思考我想要的东西,直到我完成最终的设计并测试了以下代码:
function replaceBacktick(input)
local backtickPattern = "`(..-)`"
local quotePattern = "`(..-)'"
isQuoteMatch = input:find(quotePattern)
if isQuoteMatch == nil then
print("this is not a quote")
print( input:gsub(backtickPattern, "\\texttt{" .. input .. "}") )
else
print("this is a quote")
end
end
replaceBacktick( "``the number of correctly identified instances divided by the total number of instances \cite{leong2016} '') and 2.53\% (sensitivity which``")
replaceBacktick("`SomeReactComponent`")
我开始从 Mico 的回答开始工作,因为从我测试过的工作开始复制代码导致错误,而且冗长得多。不过,它还是很有帮助,因为我学会了如何编写 if 语句和函数,之前我并不知道语法。
我做了一个大胆的假设,认为不触发 if 语句中的 return 语句就可以了,并且 LaTeX 中的文本将保持原样(显然是这样)。即使在阅读了一些文章之后,在 LaTeX 中为了调试目的而打印对我来说仍然是个谜。
无论如何,这是对我有用的最终代码,并且忽略引号,甚至单引号!
\usepackage{luacode}
\begin{luacode}
function backticks2tt ( input )
local isQuoteMatch = input:find("`(..-)'")
if isQuoteMatch == nil then
return ( input:gsub ( "`(..-)`" , "\\inlinecode{\\detokenize{%1}}" ) )
end
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
"process_input_buffer", backticks2tt, "backticks2tt" )}}