\texttt
종료 .
또는 조건을 사용하여 갱신 명령을 시도하고 있습니다 ,
. 하지만 이것을 만든 후 :
\usepackage{xstring}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{%
\OldTexttt{\hspace{0.4em}#1}%
\IfEndWith{#1}{.}{}{\hspace{0.4em}}%
}
편집: 작동하지 않는 예입니다.
\documentclass{article}
\usepackage{xstring}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{%
\OldTexttt{\hspace{0.4em}#1}%
\IfEndWith{#1}{.}{}{\hspace{0.4em}}%
\IfEndWith{#1}{,}{}{\hspace{0.4em}}%
}
\begin{document}
\section{This is \texttt{section.}}
bbbb
\texttt{test}
\texttt{section.}
\texttt{section,}
\texttt{test}
aaa
\end{document}
오류:
! Argument of \@sect has an extra }.
<inserted text>
\par
l.18 \section{This is \texttt{section.}}
?
! Emergency stop.
<inserted text>
\par
l.18 \section{This is \texttt{section.}}
무엇이 문제인지 도와줄 수 있는 사람이 있나요?
답변1
여기에 해결책이 있습니다.expl3
\documentclass[]{article}
\usepackage[T1]{fontenc}
\usepackage{beramono}
\usepackage{letltxmacro}
\LetLtxMacro\OldTexttt\texttt
\usepackage{xparse}
\ExplSyntaxOn
\cs_new:Npn \petr_extract_lasttoken:n #1
{
\tl_head:f { \tl_reverse:n { #1 } }
}
\cs_generate_variant:Nn \tl_if_eq:nnF {xnF}
\DeclareDocumentCommand \texttt { m }
{
\hspace*{0.4cm}
\OldTexttt{ #1 }
\tl_if_eq:xnF { \petr_extract_lasttoken:n {#1} } { . } {\hspace*{0.4cm}}
}
\ExplSyntaxOff
\begin{document}
foo \texttt{bar} foo
foo \texttt{bar.} foo
\section{This is \texttt{section.}}
bbbb
\texttt{test}
\texttt{section.}
\texttt{section,}
\texttt{test}
aaa
\end{document}
답변2
재정의된 내용 \texttt
은 견고하지 않습니다. 이는 원래의 강력한 LaTeX 내부를 관리하는 \DeclareRobustCommand
패키지를 사용 하여 수행할 수 있습니다 .letltxmacro
\texttt
\documentclass{article}
\usepackage{xstring}
\usepackage{letltxmacro}
\LetLtxMacro\OldTexttt\texttt
\DeclareRobustCommand*{\texttt}[1]{%
\OldTexttt{\hspace{0.4em}#1}%
\IfEndWith{#1}{.}{}{%
\IfEndWith{#1}{,}{}{\hspace{0.4em}}%
}%
}
\begin{document}
\section{This is \texttt{section.}}
bbbb
[\texttt{test}]
[\texttt{section.}]
[\texttt{section,}]
[\texttt{test}]
aaa
\end{document}
업데이트:또한 매크로의 논리는 0.4em
문자열이 다음으로 끝나지 않는 경우 가져오도록 수정되었습니다..
또는 ,
.
답변3
이것은 을 위한 직업입니다 l3regex
! 물론 여전히 \texttt
. \LetLtxMacro
그러나 나는 사용하지 않을 것입니다 \hspace*
. 줄 바꿈 시 추가 공간이 사라져야 합니다.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{letltxmacro,xparse,l3regex}
\LetLtxMacro\latextexttt\texttt
\ExplSyntaxOn
\DeclareDocumentCommand \texttt { m }
{
\petr_spaced_texttt:n { #1 }
}
\cs_new_protected:Npn \petr_spaced_texttt:n #1
{
\hspace{0.4em}
\latextexttt{ #1 }
% Check if the string ends with a period or a comma
% \Z matches the end of the string
\regex_match:nnF { (\.|\,) \Z } { #1 } { \hspace{0.4em} }
}
\ExplSyntaxOff
\begin{document}
\tableofcontents
\section{This is |\texttt{section.}|}
bbbb
|\texttt{test}|
|\texttt{section.}|
|\texttt{section,}|
|\texttt{test}|
aaa
\end{document}