수학 모드의 조건이 있는 똑바로 굵은 그리스어

수학 모드의 조건이 있는 똑바로 굵은 그리스어

안녕하세요!

나는 stackechange 전체를 검색했지만 답을 찾을 수 없었습니다. 저는 Latex를 처음 접했기 때문에 접근 방식이 적절하지 않습니다. 그리스 문자 형식을 다음과 같이 지정하는 매크로를 정의하려고 합니다.똑바로 굵은. 나는 그것을 할 수 있는 여러 가지 방법이 있다는 것을 알고 있습니다. 나는 isomath의 사용을 피하고 다음을 고수하고 싶습니다.그리스의패키지.

나는 글을 쓸 수 있기를 원한다

\gb{\alpha}
\gb{\Alpha}

두 경우 모두 똑바로 굵은 문자를 얻습니다. 내부 코드는 다음과 같습니다.

\newcommand{\gb}[1]{ % Imagine #1=\Psi
\StrGobbleLeft{\detokenize{#1}}{1}[\chrcodet] % variable "\Psi"
\StrGobbleRight{\chrcodet}{1}[\chrcode] % variable "Psi"
\StrLeft{\chrcode}{1}[\chrfirst] % first character "P"
\IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst} % Is it capital?
    {\boldsymbol{#1}} % Yes - no modification
    {\boldsymbol{\csname up\chrcode\endcsname}} % No - glue \up+Psi (that what happens!)
}

제어 시퀀스의 첫 번째 문자를 얻으려고 하는데 대문자인 경우 수정 없이 호출하고 , 그렇지 않으면 시작 부분에 \boldsymbol배치하여 제어 시퀀스를 수정하고 싶습니다 . \up그래서 그렇게 하면 다음과 같은 오류가 발생합니다.

! Undefined control sequence.
\bm@command ->\upPsi

"if" 조건은 항상 거짓인 것처럼 보입니다. 즉, "P"는 대문자로 인식되지 않으므로 다음 MWE에서는 "소문자"를 두 번 씁니다.

\documentclass{article}
\usepackage{bm,upgreek}
\usepackage{etoolbox}
\usepackage{xstring}

\newcommand{\gb}[1]{
    \StrGobbleLeft{\detokenize{#1}}{1}[\chrcodet]
    \StrGobbleRight{\chrcodet}{1}[\chrcode]
    \StrLeft{\chrcode}{1}[\chrfirst]
    #1 - \IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst}{uppercase}{lowercase}
}

\begin{document}

\begin{equation}
    \psi,\Psi,\gb{\psi},\gb{\Psi}
\end{equation}

\end{document}

누구든지 나에게 아이디어를 줄 수 있습니까? 왜 예상대로 작동하지 않습니까?

답변1

bm더 이상 재정의하지 않고 그냥 하고 싶은 대로 하면 되지 않나요 ?

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

\documentclass{article}
\usepackage{bm,upgreek}


\begin{document}

\begin{equation}
    \psi, \uppsi, \Psi,\bm{\psi},\bm{\uppsi},\bm{\Psi}
\end{equation}

\end{document}

답변2

David Carlisle에게 정말 감사드립니다!

catcodes에 대한 정확한 생각이었습니다. 경험이 부족해서 catcode에 대해 전혀 몰랐습니다. 시도를 해보니 나도 혼란스러웠다.etoolbox정상 (catcode 11)과 Detokenized (catcode 12) \ifstrequal를 비교하는 함수를 사용 했는데 작동했습니다! 도구 상자의 소스 코드 내부를 살펴보기로 결정한 후 두 피연산자 모두에 적용되는 것을 발견했습니다. 그래서 비슷한 방식으로 매크로를 수정하여 이제 예상대로 작동합니다.PP\detokenize

매크로:

\documentclass{article}

\usepackage{bm,upgreek}
\usepackage{etoolbox}
\usepackage{xstring}

\newcommand{\gb}[1]{
    \StrGobbleLeft{\detokenize{#1}}{1}[\chrcode]
    \StrGobbleRight{\chrcode}{1}[\chrcode]
    \StrLeft{\chrcode}{1}[\chrfirst]
    \edef\tempa{\detokenize{ABCDEFGHIJKLMNOPQRSTUVWXYZ}}
    #1 - no\;detokenize: \IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst}{upper}{lower}, \,
    detokenize\;both: \IfSubStr{\tempa}{\chrfirst}{upper}{lower}, \,
    etoolbox: \expandafter\ifstrequal\expandafter{\chrfirst}{P}{upper}{lower}
}

\begin{document}

\begin{equation}
    \gb{\psi}
\end{equation}

\begin{equation}
    \gb{\Psi}
\end{equation}

\end{document}

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

아마도 이것이 최선의 해결책은 아니며 제기된 문제에 효율적이지 않다고 생각하지만 유용한 경험이었습니다!

관련 정보