datatool 패키지의 \DTLgetvalue로 정의된 명령과 함께 mhchem 패키지의 \ce{}를 사용하려고 시도한 결과 예기치 않은 결과가 발생했습니다.

datatool 패키지의 \DTLgetvalue로 정의된 명령과 함께 mhchem 패키지의 \ce{}를 사용하려고 시도한 결과 예기치 않은 결과가 발생했습니다.

파싱하고 싶은 화학 화합물 목록이 포함된 CSV 파일이 있는데, 이를 통해 \ce{}좋은 mhchem화학 표기법으로 변환됩니다. 원시 문자열을 작업 인수로 사용하는 동안 \ce{}동일한 문자열이 명령으로 제공되면 매크로는 아무 작업도 수행하지 않습니다.

\documentclass{scrartcl}
\begin{filecontents*}{foo.csv}
Molecule
CH4
\end{filecontents*}
\usepackage{datatool}
\usepackage{mhchem}
\DTLloaddb{foo}{foo.csv}
\DTLgetvalue{\methane}{foo}{1}{1}
\begin{document}

CH4

\methane

\ce{CH4}

\ce{\methane}

\end{document}

수확량

결과 스크린샷

따라서 아무것도 하지 않는 것입니다( 아래 첨자로 \ce{\methane}넣어야 합니다 ).4

답변1

\ce인수를 확장해야 하는 것 같습니다 (아마도 \ce구문 분석하기 때문에).\expandafter인수가 올바른 형식인지 확인하려면 다음을 수행하세요.

\expandafter\ce\expandafter{\methane}

설명

내부에서 \ce활성 문자(예 ^: _{)는 다른 의미를 갖습니다. 직관적인 의미이지만 기술적으로 표준 LaTeX와는 매우 다릅니다. 따라서 \ce확장되지 않은 입력을 구문 분석해야 합니다.

이 특별한 경우에 \ce발견된 \methane다음 화학적 포맷을 수행했습니다. 화학적으로 보이지 않기 때문에 그냥 복사해서 나중에 CH4.

\expandafter\ce\expandafter{\methane}그것을 살펴보기 전에 \methane확장되었는지 확인하십시오 .CH4\ce

이에 대한 고유한 명령을 만들 수 있습니다.

\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}

간단하게 쓸 수 있도록

\myce{\methane}

관련 정보