
나는 여기서 근본적인 것을 무시하고 있을 가능성이 높으며 몇 가지 힌트를 원했습니다. 삽입된 mwe를 참조하세요.
chemfig 기호 라이브러리를 갖는 측면에서 명령을 통해 특정 기호(외부 .tex 파일에 저장됨)를 가리킬 수 있다는 점에서 가치가 있다고 생각합니다 . \input{}
명백한 구성은 다음과 같습니다.\chemfig[][]{\input{<chemfig symbol library path>/{<symbol name>}}}
\documentclass[preview,border=7pt,active,tightpage]{standalone}
\usepackage{booktabs}
\usepackage{chemfig}
\usepackage{filecontents}
\usepackage[scaled]{helvet}
%\begin{filecontents}{methane.tex}
%H% 2
% -[:210]% 1
% (
% -[:210]H% 3
% )
% (
% -[:300]H% 5
% )
% -[:120]H% 4
%\end{filecontents}
% representation without comments
\begin{filecontents}{methane.tex}
H
-[:210]
(
-[:210]H
)
(
-[:300]H
)
-[:120]H
\end{filecontents}
\DeclareRobustCommand{\robustinputcommand}{\input{methane.tex}}
% sans serif font
\renewcommand\familydefault{\sfdefault}
% define formulae
\def\methane{\mathrm{CH_{4}}}
\begin{document}
\begin{center}
\begin{tabular}[]{lp{1.5cm}}
\toprule
\textbf{Formula} & \textbf{Structure}\\
\midrule%
%$\methane$ & \begin{minipage}[]{1cm} \chemfig{\input{methane.tex}} \end{minipage} \\ [2mm]% gives error
%$\methane$ & \begin{minipage}[]{1cm} \chemfig{\protect\input{methane.tex}} \end{minipage} \\ [2mm]% gives error
%$\methane$ & \begin{minipage}[]{1cm} \chemfig{\robustinputcommand} \end{minipage} \\ [2mm]% gives error
\bottomrule
\end{tabular}
\end{center}
\end{document}
내가 일관되게 관찰하는 오류는 다음과 같습니다.
! Undefined control sequence.
<everyeof> \_nil
나는 몇 가지 접근법, 특히 설명된 접근법을 시도했습니다.여기. 이는 mwe에 설명되어 있습니다.
구조: \input{<full file path>}
(문서 수준 호출) 및 (외부 문서의 일반 구조)는 잘 작동하지만 문서 수준에서 선택적 인수로 \chemfig[][]{<content defining symbol>}
서식을 즉시 적용할 수는 없습니다 . 하다.[scale=0.5]
\chemfig
답변1
\chemfiginput
다음은 와 같은 선택적 인수도 허용하는 명령 입니다 \chemfig
.
% representation without comments
\begin{filecontents}{methane.tex}
H
-[:210]
(
-[:210]H
)
(
-[:300]H
)
-[:120]H
\end{filecontents}
\documentclass{article}
\usepackage{booktabs}
\usepackage{chemfig}
\usepackage[scaled]{helvet}
\usepackage{catchfile}
% sans serif font
\renewcommand\familydefault{\sfdefault}
% define formulae
\newcommand\methane{\ensuremath{\mathrm{CH_{4}}}}
\newcommand{\chemfiginput}[2][]{%
\CatchFileDef{\chemfiginputtemp}{#2}{\csname CF_sanitizecatcode\endcsname}%
\expandafter\chemfigdo\expandafter{\chemfiginputtemp}{#1}%
}
\newcommand{\chemfigdo}[2]{\chemfig[#2]{#1}}
\begin{document}
\begin{tabular}[]{ll}
\toprule
\textbf{Formula} & \textbf{Structure}\\
\midrule
\methane & \chemfiginput{methane} \\
\methane & \chemfiginput[chemfig style={color=red!40!black, line width=1.5pt}]{methane} \\
\methane & \chemfig{H-[:210](-[:210]H)(-[:300]H)-[:120]H} \\
\bottomrule
\end{tabular}
\end{document}
답변2
명령 을 둘러싸는 대신 \chemfig{
및 를 포함 }
하면 분명히 작동하는 것 같습니다.methane.tex
\input
\documentclass[preview,border=7pt,active,tightpage]{standalone}
\usepackage{booktabs}
\usepackage{chemfig}
\usepackage{filecontents}
\usepackage[scaled]{helvet}
\usepackage{adjustbox}
\begin{filecontents}{methane.tex}
\chemfig{
H
-[:210]
(
-[:210]H
)
(
-[:300]H
)
-[:120]H}
\end{filecontents}
% sans serif font
\renewcommand\familydefault{\sfdefault}
% define formulae
\def\methane{$\mathrm{CH_{4}}$}
\begin{document}
\begin{center}
\begin{tabular}[]{ll}
\toprule
\textbf{Formula} & \textbf{Structure}\\
\midrule
\methane & \adjustbox{valign=m}{\input{methane.tex}}\\ [2mm]
\bottomrule
\end{tabular}
\end{center}
\end{document}
답변3
\chemfig
외부 파일에서 호출을 제거할 때 까다로운 부분은 .tex
필수 인수를 읽기 전에 범주 코드를 변경한다는 것입니다. 이에 대처하기 위해 패키지 \CatchFileDef
에서 를 사용하여 에서 사용 하는 것과 동일한 카테고리 코드 설정으로 catchfile
의 내용을 저장합니다 .methane.tex
\chemfig
아래 코드는 일반적이며 다른 분자에 대해 별다른 노력 없이 사용할 수 있습니다. 티케이분자 구조 인쇄를 위한 Z 옵션은 중앙 위치( \myprintmol
)에 지정할 수 있으며 다음에는 중복이 없습니다 tabular
. 분자 이름을 쉼표로 구분하면 됩니다.
\documentclass{article}
\usepackage{booktabs}
\usepackage{array} % for \newcolumntype
\usepackage{collcell} % for \collectcell
\usepackage{chemfig}
\usepackage{filecontents}
\usepackage{catchfile} % for \CatchFileDef
\usepackage{adjustbox} % for \adjustbox
\usepackage{etoolbox} % for \forcsvlist
% cf. <https://tex.stackexchange.com/a/98011/73317> (Ulrike Fischer)
\DeclareMathAlphabet{\mathup}{T1}{\familydefault}{m}{n}
\newcommand*{\mydeclaremolstruct}[1]{%
\expandafter\CatchFileDef\expandafter{\csname #1struct\endcsname}{#1.tex}%
{\csname CF_sanitizecatcode\endcsname}%
}
\newcommand*{\myprintmol}[1]{%
\begingroup
% Here, you can customize how molecule structure is printed (TikZ options)
\setchemfig{chemfig style={color=red!40!black, line width=1.5pt}}%
%
\adjustbox{valign=M}{% To align with vertical center of the whole molecule
\expandafter\chemfig\expandafter{#1}% Process tokenized contents from
}% % external per-molecule .tex files
\endgroup
}
\begin{filecontents}{methane.tex}
H
-[:210]
(
-[:210]H
)
(
-[:300]H
)
-[:120]H
\end{filecontents}
\mydeclaremolstruct{methane} % base name of the corresponding .tex file
\newcommand*{\methane}{\mathup{CH}_{4}}
% Special column type for representing the molecule structure
\newcolumntype{M}{>{\collectcell\myprintmol}c<{\endcollectcell}}
\newcommand*{\generatetableline}[1]{%
$\csname #1\endcsname$ & \csname #1struct\endcsname \\
}
\begin{document}
\begin{tabular}{lM}
\toprule
\textbf{Formula} & \multicolumn{1}{c}{\textbf{Structure}}\\
\midrule
\forcsvlist{\generatetableline}{methane}%
%\forcsvlist{\generatetableline}{methane, ethane, propane}%
\bottomrule
\end{tabular}
\end{document}
다음은 약간 단순화되었지만 테이블 구성에 대해 약간 덜 자동화된 것입니다.
\documentclass{article}
\usepackage{booktabs}
\usepackage{array} % for \newcolumntype
\usepackage{collcell} % for \collectcell
\usepackage{chemfig}
\usepackage{filecontents}
\usepackage{catchfile} % for \CatchFileDef
\usepackage{adjustbox} % for \adjustbox
% cf. <https://tex.stackexchange.com/a/98011/73317> (Ulrike Fischer)
\DeclareMathAlphabet{\mathup}{T1}{\familydefault}{m}{n}
\newcommand*{\mydeclaremolstruct}[1]{%
\expandafter\CatchFileDef\expandafter{\csname #1struct\endcsname}{#1.tex}%
{\csname CF_sanitizecatcode\endcsname}%
}
\newcommand*{\myprintmol}[1]{%
\begingroup
% Here, you can customize how molecule structure is printed (TikZ options)
\setchemfig{chemfig style={color=red!40!black, line width=1.5pt}}%
%
\adjustbox{valign=M}{% To align with vertical center of the whole molecule
\expandafter\chemfig\expandafter{#1}% Process tokenized contents from
}% % external per-molecule .tex files
\endgroup
}
\begin{filecontents}{methane.tex}
H
-[:210]
(
-[:210]H
)
(
-[:300]H
)
-[:120]H
\end{filecontents}
\mydeclaremolstruct{methane} % base name of the corresponding .tex file
\newcommand*{\methane}{\mathup{CH}_{4}}
% Special column type for representing the molecule structure
\newcolumntype{M}{>{\collectcell\myprintmol}c<{\endcollectcell}}
\begin{document}
\begin{tabular}{>{$}l<{$}M}
\toprule
\textbf{Formula} & \multicolumn{1}{c}{\textbf{Structure}}\\
\midrule
\methane & \methanestruct \\
\bottomrule
\end{tabular}
\end{document}
(이전 스크린샷과 동일한 출력)