如何以不同的方式顯示程式設計關鍵字?

如何以不同的方式顯示程式設計關鍵字?

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

相關內容