Das Softwareprogramm Slack, wie diese Website, hat eine sehr nette Funktion. Wenn ich Backticks wie folgt eingebe: `` kann ich jedes Programmierwort darin schreiben. Wie: someFunction()
.
Wie mache ich das in LaTeX? Ich möchte einen ähnlichen Effekt im Ausgabe-PDF.
Ich bin ziemlich sicher, dass die Frage bereits beantwortet wurde, aber mir fallen nicht die richtigen Suchbegriffe ein, um sie zu finden. Die Schnitzeljagd nach Suchbegriffen ist real.
Antwort1
Hier ist eine auf LuaLaTeX basierende Lösung. TeX-Sonderzeichen wie _
und &
können zwischen Paaren von Backtick-Zeichen auftreten.Nachtragum einen Folgekommentar des OP einzufügen: Es muss darauf geachtet werden, aufeinanderfolgende Backtick-Zeichen nicht falsch zu interpretieren – diese werden in TeX- und LaTeX-Dokumenten im Allgemeinen verwendet, um eine Instanz zitierten Materials einzuleiten!
% !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}
Ein Kommentar zur Art des Mustervergleichs, der von der Lua-Funktion durchgeführt wird, backticks2tt
scheint angebracht. Das Muster
`(..-)`
ist die "nicht-gierige" Art und Weise, das Muster "alle Instanzen vonein oder mehrere Zeichendie von Backtick-Zeichen umschlossen sind". Um eine "gierige" Musterübereinstimmung von "einem oder mehreren Zeichen" in Lua anzugeben, würde man Folgendes eingeben
`.+`
Ein gieriger Mustervergleich wäre hier jedoch nicht angebracht, da er am Ende die gesamte Zeichenfolge erfassen würde
someFunction()` bb `some_other_Function()
in das oben gezeigte MWE und ändern Sie es in
\texttt{\detokenize someFunction()` bb `some_other_Function()}
Das ist offensichtlich nicht richtig und deshalb ist es notwendig, eine nicht gierige Musterübereinstimmung anzugeben.
Antwort2
Aufgrund von Micos Antwort wurde ich etwas ernster. Aus irgendeinem Grund hatte ich immer noch einige Probleme. Also beschloss ich, durch einige Artikel etwas Lua zu lernen und es auszuprobierenRepl.it. Die Website ermöglicht es mir, Dinge schnell zu testen und auszudrucken.
AnRepl.itIch habe meine Wünsche so lange wiederholt, bis ich mein endgültiges Design gefunden hatte, und habe den folgenden Code getestet:
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`")
Ich begann mit der Arbeit von Mico seine Antwort, weil die Arbeit von meinem getestetenRepl.itDer Code führte zu Fehlern und war auch viel ausführlicher. Trotzdem hat es geholfen, da ich gelernt habe, wie man if-Anweisungen und Funktionen schreibt. Die Syntax kannte ich vorher nicht.
Ich bin davon ausgegangen, dass es in Ordnung wäre, die Return-Anweisung in der If-Anweisung nicht auszulösen und den Text in LaTeX so zu belassen, wie er ist (was anscheinend der Fall ist). Das Drucken zu Debugzwecken in LaTeX ist mir selbst nach dem Lesen einiger Artikel ein Rätsel.
Wie dem auch sei, dies ist der endgültige Code, der bei mir funktioniert und Anführungszeichen ignoriert, sogar einfache Anführungszeichen!
\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" )}}