정규화된 이름에서 마침표 주위의 공백 제거

정규화된 이름에서 마침표 주위의 공백 제거

마침표가 아닌 마침표 주위의 공백을 어떻게 제한할 수 있습니까(예: 문장을 끝내지 않음)?

내 논문에서는 한정된 이름(예: )을 참조해야 합니다 A.x. 현재는 \texttt{A.x}. 그러나 이로 인해 마침표 주위에 공간이 생성되는 경우가 있습니다(예: 다음 코드 조각).

공백이 있는 정규화된 이름입니다.

이름 부분을 구분하는 마침표 기호 주위에 약간의 공간만 두고 싶지만 내가 찾을 수 있는 모든 것은 수학 모드의 간격과 관련된 것이었습니다. 또한 다음과 같이 일시적으로 catcode를 .11로 변경해 보았습니다.

\newcommand{\codename}[1]{
  \begingroup
  \catcode`.=11
  \texttt{#1}
  \endgroup
}

그런 다음 \codename{A.x}. 그러나 그것은 도움이 되지 않았습니다.

어떤 도움이라도 정말 감사하겠습니다.

답변1

다음과 같이 명령을 정의할 수 있습니다.

\newcommand{\codename}[2]{#1\kern-.05em.\kern-.05em#2}

A.x그런 다음 다음 과 비교하십시오 \codename{A}{x}.

여기에 이미지 설명을 입력하세요

을 사용하면 \kern줄 바꿈 및 늘어남을 방지할 수 있습니다. 원하는 대로 컨 요소를 조정할 수 있습니다. 저는 -.05em양쪽 길이를 선택했지만, 글꼴이 다르면 앞뒤 길이가 필요할 수도 있습니다.

답변2

\textttOP의 주요 문제는 그가 다른 모든 문자와 동일한 너비로 점을 설정한다는 사실을 좋아하지 않는다는 것입니다 .

여기서는 토큰 주기를 사용하여 문제를 해결합니다. 나는 인수의 모든 토큰을 검색합니다 \codename. 를 찾을 때마다 .를 로 바꿉니다 \nobreak{\textrm{.}}\nobreak. 이는 점이 여러 개 있는 코드 이름이 매크로에 문제가 되지 않음을 의미합니다.

이렇게 하면 컨텍스트에 따라 점으로 인해 발생하는 간격이 방지되고 에서 점을 설정하면 가 에서 설정된 \textrm경우에도 점의 추가 너비가 방지됩니다 .\codename\texttt

\documentclass{article}
\usepackage{tokcycle}
\Characterdirective{\ifx.#1\addcytoks{\nobreak{\textrm{.}}\nobreak}\else
  \addcytoks{#1}\fi}
\newcommand\codename[1]{\tokencyclexpress#1\endtokencyclexpress}
\begin{document}
Here is \codename{A.1} code name.
Code names such as \texttt{\codename{A.2.4}}, can contain multiple dots!
By setting the dots in textrm, extra spacing is avoided even if the 
codename is set in texttt.
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보