如何以不同的方式显示编程关键字?

如何以不同的方式显示编程关键字?

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" )}}

相关内容